Loading... # 概述 ## 定义 同一行为,具有多个不同的表现形式。 ## 前提 1. 继承或者实现(二选一); 2. 方法重写(不重写,则毫无意义); 3. 父类引用指向子类对象(格式体现)。 # 体现 ```java has-numbering Fu f = new Zi(); f.method(); 12 ``` ## 成员访问特点 * 成员方法:编译看左,运行看右 * 成员变量:编译看左,运行看左 # 多态的优点 实际开发的过程中,父类类型作为方法形式参数,传递子类对象给方法,进行方法的调用,更能体现出多态的扩展性与便利。 无论 `=` 右边 new 的是哪个子类对象, `=` 左边调用的方法都不会变。 # 引用类型转换 ## 向上转型 多态本身是子类类型向父类类型向上转换的过程,这个过程是默认的。 当父类引用指向一个子类对象时,就是向上转型。 * 格式: `父类名称 对象名 = new 子类名称();` * 含义:= 右侧创建一个子类对象,把它当作父类来看待。 * 注意:向上转型一定是安全的。 * 弊端:一旦向上转型为父类,就无法调用子类的特有方法。 ## 向下转型 父类类型向子类类型向下转换的过程,这个过程是强制的。 * 格式: `子类名称 对象名 = (子类名称) 父类对象;` * 含义:将父类对象还原为本来的子类对象。 * 注意:本来是什么子类,才能向下转型为什么子类。 ## 为什么要转型 当使用多态调用方法时,首先检查父类中是否有该方法,如果没有,则编译错误。也就是说不能调用子类拥有,而父类没有的方法。所以,如果要调用子类特有的方法,就必须向下转型。 ## 转型的异常 `ClassCastException` :类型转换异常(本来是什么子类,才能向下转型为什么子类)。 为了避免ClassCastException的发生,Java提供了 `instanceof` 关键字,给引用变量做类型的校验。 ## instanceof 判断类型:如何才能知道一个父类引用对象,本来是什么类型? * 格式: `变量名 instanceof 数据类型;` * 得到一个boolean值,判断前面的对象能否作为后面类型的实例。 * true:该变量属于该数据类型; * false:该变量不属于该数据类型。 # 接口多态案例 ## 需求 笔记本电脑(laptop)通常具备使用USB设备的功能。在生产时,笔记本都预留了可以插入USB设备的USB接口, 但具体是什么USB设备,笔记本厂商并不关心,只要符合USB规格的设备都可以。 定义USB接口,具备最基本的开启功能和关闭功能。鼠标和键盘要想能在电脑上使用,那么鼠标和键盘也必须遵守 USB规范,实现USB接口,否则鼠标和键盘的生产出来也无法使用。 ## 分析 进行描述笔记本类,实现笔记本使用USB鼠标、USB键盘 * USB接口:包含开启功能、关闭功能 * 笔记本类:包含运行功能、关机功能、使用USB设备功能 * 鼠标类:要实现USB接口,并具备点击的方法 * 键盘类:要实现USB接口,具备敲击的方法 > 感谢小伙伴们的关注! > 你的点赞、评论、关注、收藏是对博主的最大鼓励! > 持续更新JavaSE学习笔记!欢迎订阅专栏! 最后修改:2021 年 10 月 06 日 © 允许规范转载 打赏 赞赏作者 支付宝微信 赞 如果觉得我的文章对你有用,请随意赞赏