java基础——多态
抽象类的多态
场景描述
一位刚毕业的老师,目前只能通过骑车上班,多年后终于坐骑升级了,有了自己的小汽车,于是骑着小汽车上班。
骑自行车上班
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();}
}
- 测试类
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:原则
- Vehicle类(交通工具)
public abstract class Vehicle {public abstract void start();public abstract void stop();
}
- Bike 类(自行车类)
public class Bike extends Vehicle{@Overridepublic void start(){System.out.println("自行车-启动:握好把手,踩下脚踏板...");}@Overridepublic void stop(){System.out.println("自行车-停止:捏刹车...");}}
- Car类(小汽车类)
public class Car extends Vehicle{@Overridepublic void start(){System.out.println("小汽车-启动:系好安全带,一键启动,打转向灯,松手差,挂挡,踩油门");}@Overridepublic void stop(){System.out.println("小汽车-停止:踩刹车,挂P档,拉手刹,关大灯,熄火,解开安全带");}
}
- Teacher类(需求者类)
public class Teacher {public void open(Vehicle v) {v.start();}public void close(Vehicle v){v.stop();}
}
- 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基础——多态相关推荐
- Java基础--多态
一.概述: 什么是多态? 在 java 程序设计中,对象变量是多态的,多态是同一个行为具有多个不同表现形式或形态的能力. 也是 OOP (Object Oriented Programming)中的一 ...
- java基础-多态-多态的理解及使用
一.多态的含义 在面向对象(OOP)的程序设计语言中,封装,继承,多态与数据抽象是其基本特征. 在java语言中, 封装就是合并属性与行为来创建一种新的数据类型, 继承则是表明数据类型之间的某种关系( ...
- Java基础---多态、抽象类、接口
2015-4-4 一.多态 1.定义:某一个事物,在不同时刻表现出来的不同状态. 2.多态的前提与体现: (1)要有继承关系: (2)要进行方法的重写: (3)要父类引用指向子类对象. 3.成员访问特 ...
- 升级版的工厂模式(外联配置文件+内用反射),体现多态好处(^-^) 【java基础-----多态好处】
工厂模式作用:根据种类生产出对应的类对象 ✿ 简单模式: 简单模式:传入参数(type,对象的构造方法的一些参数)switch(type): case type1: return 对象1; case ...
- [Java基础]多态基础
多态:
- Java编程实现静态多态,java基础--多态-域与静态方法1(java编程思想)
看以下例子: package extendsTest; /** * * @author xiaoyu * */ class Super{ public int field=0; public int ...
- java基础(多态的理解与应用)
1:多态概述 代码中的多态:父类引用指向子类对象.Animal ani = new Dog(); 狗是动物,这就是多态. 父类名称 变量名 = new 子类名称(); 接口名称 对象名 = new 实 ...
- java写一个外网访问的接口_【JAVA基础】一个案例搞懂类、对象、重载、封装、继承、多态、覆盖、抽象和接口概念及区别(中篇)...
0 前言 初学JAVA时,总会对一些概念一知半解,相互混淆,不明其设计的用意,如类.对象.重载.封装.继承.多态.覆盖.抽象类.接口概念.为便于理解和巩固,本文将基于一个案例及其变形,展现各个概念的定 ...
- java 多态判断非空_跳槽涨薪季面试题之java基础(一)
点击上方[全栈开发者社区]→右上角[...]→[设为星标⭐] 为迎接金九银十跳槽涨薪季,小编汇总了java精编版面试题,大概从java基础.java8特性.多线程.spring.springboot. ...
- Java基础篇:封装、继承、多态三大特性
目录: 一.Java三大特性之:封装 二.Java三大特性之:继承 三.Java三大特性之:多态 一.Java三大特性之:封装 1.什么是封装: 封装,就是将数据和基于数据的操作封装在一起,数据被保护 ...
最新文章
- 使用nc传输文件和目录【转】
- JAVA三元运算符排序三个随机数
- sqlserver日志文件过大的处理方法
- A. Many Equal Substrings(自己很水)
- 前端开发-日常开发沉淀之生产环境与开发环境
- Java设计模式之结构型:适配器模式
- Linux Shell常用命令总结
- Logistic回归与梯度上升算法
- 《小团队构建大网站:中小研发团队架构实践》送书活动结果公布
- Could not load oracle/sql/converter_xcharset/lx20354.glb.
- 钉钉在线求饶?五星分期付款?爬取钉钉App Store真实评价数据并分析
- python——re模块
- 微信表白神秘代码!快发给ta!(学习资料)
- Web—信息收集(非常全)
- 微信第三方开平台代公众号发起网页授权 获取用户信息 openid,uninoid
- AMD锐龙7 7745HX和i9-12900HX选哪个 r77745HX和i912900HX对比
- mysql数据库所有表合并_mysql数据库如何将表合并我从数据库中倒出表导出后是这样的b 爱问知识人...
- 两个主要问题将决定微信支付成败
- 环保行业舆情管理制度
- 专访铃盛(RingCentral)何必苍:以不断创新的MVP赋能未来混合办公