抽象类的多态

场景描述

一位刚毕业的老师,目前只能通过骑车上班,多年后终于坐骑升级了,有了自己的小汽车,于是骑着小汽车上班。

骑自行车上班

1.自行车类

public class Bike{//自行车类public void start(){System.out.println("自行车-启动:握好把手,踩下脚踏板...");}public void stop(){System.out.println("自行车-停止:捏刹车...");}
}

2.教师类

public class Teacher {public void open(Bike bike) {bike.start();}public void close(Bike bike){Bike bike.stop();}
}
  1. 测试类
public class Test01 {public static void main(String[] args) {Teacher t = new Teacher();Bike bike = new bike();t.open(bike);System.out.println("欣赏沿途的风景...");t.close(bike);}
}

开小车上班

如果此时我们还是这样先去写一个小汽车类,然后在教师类里重载open和close方法,那么这样是不是会觉得代码冗余呢,有些朋友会说并没有,那当我们面对更多人,以及更多的上班方式时,那你是不是要分别为他们准备一套,那样未必太麻烦了,而且还会破坏OCP原则;这时,我们就可以用多态的方式完成这样,只需要提取一个交通工具类,然后当需求增加的时候我们直接扩充这个交通工具类就可以了。
OCP原则 - 开闭原则:需求改动,尽可能少影响原有代码
* O - open :对创建类,是欢迎的
* C - close:对原有代码进行修改,是拒绝的
* p - principle:原则

  1. Vehicle类(交通工具)
public abstract class Vehicle {public abstract void start();public abstract void stop();
}
  1. Bike 类(自行车类)
public class Bike extends Vehicle{@Overridepublic void start(){System.out.println("自行车-启动:握好把手,踩下脚踏板...");}@Overridepublic void stop(){System.out.println("自行车-停止:捏刹车...");}}
  1. Car类(小汽车类)
public class Car extends Vehicle{@Overridepublic void start(){System.out.println("小汽车-启动:系好安全带,一键启动,打转向灯,松手差,挂挡,踩油门");}@Overridepublic void stop(){System.out.println("小汽车-停止:踩刹车,挂P档,拉手刹,关大灯,熄火,解开安全带");}
}
  1. Teacher类(需求者类)
public class Teacher {public void open(Vehicle v) {v.start();}public void close(Vehicle v){v.stop();}
}
  1. Test类(测试类)
public class Test01 {public static void main(String[] args) {Teacher t1 = new Teacher();//类的多态:子类对象指向父类引用//类的多态:父类引用存储了子类对象的内存地址Vehicle v = new Bike();t1.open(v);System.out.println("欣赏沿途的风景...");t1.close(v);System.out.println("...................");Teacher t2 = new Teacher();Vehicle vehicle = new Car();t2.open(vehicle);System.out.println("欣赏沿途的风景...");t2.close(vehicle);}
}


在我们升级后,如果需求增加时,比如有一个电动车的需求,那么我们的步骤就应该是,创建一个电动车的类去继承交通工具类,然后重写交通工具类的抽象方法。创建电动车对象指向父类引用,再交给给需求者使用便可。在这里同样是调用t.open(v);和t.close(v);这是结果就不一样的。这就是多态的结果,不同人都要上班,就一个上班的动作,而产生上班方式的结果不一样。

提示

以上只是我自己的看法,如有相同纯属意外。如有错误,也请谅解,勿喷!如有收获或疑问,欢迎点赞评论!

java基础——多态相关推荐

  1. Java基础--多态

    一.概述: 什么是多态? 在 java 程序设计中,对象变量是多态的,多态是同一个行为具有多个不同表现形式或形态的能力. 也是 OOP (Object Oriented Programming)中的一 ...

  2. java基础-多态-多态的理解及使用

    一.多态的含义 在面向对象(OOP)的程序设计语言中,封装,继承,多态与数据抽象是其基本特征. 在java语言中, 封装就是合并属性与行为来创建一种新的数据类型, 继承则是表明数据类型之间的某种关系( ...

  3. Java基础---多态、抽象类、接口

    2015-4-4 一.多态 1.定义:某一个事物,在不同时刻表现出来的不同状态. 2.多态的前提与体现: (1)要有继承关系: (2)要进行方法的重写: (3)要父类引用指向子类对象. 3.成员访问特 ...

  4. 升级版的工厂模式(外联配置文件+内用反射),体现多态好处(^-^) 【java基础-----多态好处】

    工厂模式作用:根据种类生产出对应的类对象 ✿ 简单模式: 简单模式:传入参数(type,对象的构造方法的一些参数)switch(type): case type1: return 对象1; case ...

  5. [Java基础]多态基础

    多态:

  6. Java编程实现静态多态,java基础--多态-域与静态方法1(java编程思想)

    看以下例子: package extendsTest; /** * * @author xiaoyu * */ class Super{ public int field=0; public int ...

  7. java基础(多态的理解与应用)

    1:多态概述 代码中的多态:父类引用指向子类对象.Animal ani = new Dog(); 狗是动物,这就是多态. 父类名称 变量名 = new 子类名称(); 接口名称 对象名 = new 实 ...

  8. java写一个外网访问的接口_【JAVA基础】一个案例搞懂类、对象、重载、封装、继承、多态、覆盖、抽象和接口概念及区别(中篇)...

    0 前言 初学JAVA时,总会对一些概念一知半解,相互混淆,不明其设计的用意,如类.对象.重载.封装.继承.多态.覆盖.抽象类.接口概念.为便于理解和巩固,本文将基于一个案例及其变形,展现各个概念的定 ...

  9. java 多态判断非空_跳槽涨薪季面试题之java基础(一)

    点击上方[全栈开发者社区]→右上角[...]→[设为星标⭐] 为迎接金九银十跳槽涨薪季,小编汇总了java精编版面试题,大概从java基础.java8特性.多线程.spring.springboot. ...

  10. Java基础篇:封装、继承、多态三大特性

    目录: 一.Java三大特性之:封装 二.Java三大特性之:继承 三.Java三大特性之:多态 一.Java三大特性之:封装 1.什么是封装: 封装,就是将数据和基于数据的操作封装在一起,数据被保护 ...

最新文章

  1. 使用nc传输文件和目录【转】
  2. JAVA三元运算符排序三个随机数
  3. sqlserver日志文件过大的处理方法
  4. A. Many Equal Substrings(自己很水)
  5. 前端开发-日常开发沉淀之生产环境与开发环境
  6. Java设计模式之结构型:适配器模式
  7. Linux Shell常用命令总结
  8. Logistic回归与梯度上升算法
  9. 《小团队构建大网站:中小研发团队架构实践》送书活动结果公布
  10. Could not load oracle/sql/converter_xcharset/lx20354.glb.
  11. 钉钉在线求饶?五星分期付款?爬取钉钉App Store真实评价数据并分析
  12. python——re模块
  13. 微信表白神秘代码!快发给ta!(学习资料)
  14. Web—信息收集(非常全)
  15. 微信第三方开平台代公众号发起网页授权 获取用户信息 openid,uninoid
  16. AMD锐龙7 7745HX和i9-12900HX选哪个 r77745HX和i912900HX对比
  17. mysql数据库所有表合并_mysql数据库如何将表合并我从数据库中倒出表导出后是这样的b 爱问知识人...
  18. 两个主要问题将决定微信支付成败
  19. 环保行业舆情管理制度
  20. 专访铃盛(RingCentral)何必苍:以不断创新的MVP赋能未来混合办公

热门文章

  1. SQL注入大闯关笔记
  2. sed -n使用变量
  3. python打印N*N乘法表
  4. ACER-4738ZG 拆机改散热
  5. Vue项目中Router路由中meta字段的妙用-案例
  6. 计算机网络对青少年的影响,计算机网络对中学生的影响及对策研究
  7. 【字符串匹配】BF算法
  8. 先分号分隔 然后逗号分割c语言,分隔符的用法
  9. js获取注册表中应用程序的路径,并通过注册表打开
  10. Java笔记23反射,设计模式