多态性指的是对象而不是类
对象的多态性指的是:一个对象拥有多种形态
代码中体现多态性其实就是一句话:父类引用指向子类对象
格式:
父类名称 对象名 = new 子类名称();
或者
接口名称 对象名 = new 实现类名称();
访问成员变量的两种方法:
1. 直接通过对象名称访问成员变量:看等号左边是谁,优先用谁,没有则向上查找
2. 间接通过成员方法访问成员变量:看方法属于谁,优先用谁,没有则向上查找
子类没有覆盖重写就是父类
子类覆盖重写了就是子类
在多态的代码中,成员方法的访问规则是:看new 的是谁,就优先用谁,没有则向上查找
口诀:编译看左 ,运行看右 。
对比:
成员变量 --- 编译看左边,运行还看左边
成员方法 --- 编译看左边,运行看右边
多态的好处:
编辑
向上转型一定是安全的,没有问题的,正确的。但是也有一个弊端:对象一旦向上转型为父类,那么就无法调用子类原本特有的内容。
解决方案:用对象的向下转型【还原】
编辑
如何才能知道一个父类引用的对象,本来是什么子类?
格式: 对象 instanceof 类名称
这样写将会得到一个boolean值结果,也就是判断前面的对象能不能当做后面类型的实例。
接口多态的综合案例 --- 笔记本电脑
背景描述:笔记本电脑通常具备使用USB设备的功能。在生产时,笔记本都预留了可以插入USB设备的USB接口,但具体是什么USB设备,笔记本厂商并不关心,只要符合USB规格的设备都可以。
案例描述:定义USB接口,具备最基本的开启功能和关闭功能。鼠标和键盘要想在电脑上使用也必须遵守USB规范,实现USB接口,否则鼠标和键盘生成出来也无法使用。
案例分析:
1. USB接口 --- 包含打开设备功能、关闭设备功能
编辑
2. 笔记本类 --- 包含开机功能、关机功能、使用USB设备功能
编辑
3. 鼠标类 --- 要实现USB接口并具备点击的方法
编辑
4. 键盘类 --- 要实现USB接口并具备敲击的方法
编辑
重点:
1. 接口的基本使用
2. 对象的上下转型
3. 接口作为参数