面向对象三大特征:封装性、继承性、多态性。
extends继承或者implements实现,是多态性的前提。
一个对象拥有多种形态,这就是:对象的多态性。

一丶
代码当中提箱多态性,其实就是一句话:父类引用指向子类对象。
格式:
父类名称 对象名 = new 子类名称();
或者:
接口名称 对象名 = new 实现类名称();

二丶
在多态的代码中,访问成员变量的两种方式:
1、直接通过对象名称访问成员变量。看等号左边是谁,优先用谁,没有就向上找。
2、间接通过成员方法访问成员变量。看该方法属于谁,优先用谁,没有则向上找。(子类没有覆盖重写,就是父;子类覆盖重写,就是子。)
口诀:编译运行都看左边。

在多态的代码中,成员方法的访问规则是:
看new的是谁,就优先使用谁,没有就向上找。
口诀:编译看左边,运行看右边。

三丶
多态的好处:提高了代码的扩展性。
多态的弊端:不能使用子类的特有方法。

四丶对象的向上转型和向下转型。
面向对象特征之多态。
对以上图片进行以下说明:
(一)向上转型:
格式:父类名称 对象名 = new 子类名称();
含义:右侧创建了一个子类对象,把它当做父类来看待使用。
好处:隐藏了子类型,提高了代码的扩展性。向上转型一定是安全的。从小范围转向了大范围。
弊端:对象一旦向上转型为父类,那么就无法调用子类原本特有的方法。功能被限定了。
什么时候用向上转型?
如果不需要面对子类型,通过提高扩展性,或者使用父类的功能即可完成操作,就使用向上转型。
如果想要使用子类的特有功能?这时就需要子类型。
(二)向下转型:
格式:子类名称 对象名 = (子类名称)父类对象。
含义:将父类对象【还原】成为本类的子类对象。
好处:可以使用子类特有功能
弊端:必须面对具体的子类型。有风险,容易发生ClassCastException(类转换异常)。只要转换类型和
对象类型不匹配就会发生。想要安全,必须要进行判断。
判断一个对象是否匹配某一类型,需要使用一个关键字instanceof
格式: 对象 instanceof 类型
这将会得到一个Boolean值结果,也就是判断前面的对象能不能当做后面类型的实例。
什么时候用向下转型?
需要使用子类型的特有方法时。但是一定要判断!

相关文章: