一、多态的定义
比如:人可以是学生,也可以是老师,也可以是军人。这就表现了人的多种形态性。多态就是多种形态。
多态的最终体现为:父类的引用变量可以指向子类对象。
多态的前提是必须有子父类关系,或者类实现接口关系,否则无法完成多态。
在使用多态后,父类的引用变量调用方法时,会调用子类重写后的方法。
二、多态使用格式
多态的格式就是父类的引用变量指向子类对象。
此外:抽象类,接口都可以实现多态的形式。
三、多态的成员变量和方法。
这个很重要!
不管怎么样,父类必须有。但是变量运行的是父类的,方法运行的是子类的。
即:编译看父类,运行看子类。
四、关键字instanceof
instanceof 关键字,用于引用类型的比较判断。有关系的判断。即:判断是不是给定的引用类型。
注意instanceof 只能对有继承关系的类,有实现关系的类的判断。其他关系类的判断是不行的。
五、多态中的向上转型
java中类型的转换包含自动类型转换和强制类型转换。多态的向上转型就属于自动类型转换。多态向下转型就是强制类型转变
除了引用类型的向上转型,还有引用类型的向下转型。如图
六、提出一个问题
1、为什么要进行向上向下转型。
向上转型表示:将子类的对象赋值给父类的引用对象。如果不向上转型,子类重写了自己的方法,子类只能调用自己重写的父类方法。
注意:向上转型后只能调用父类子类共有的方法,子类扩展的方法无法调用。父类的所有方法都被子类继承。即使子类没有重写,子类就是有。如果要调用子类自己的方法需要向下转型。
那么为什么不直接创建一个子类对象呢?
其实问题的关键在于,子类重写了父类的方法,向上转型让父类引用变量可以调用子类重写父类的方法。但不能调用子类重写的方法。如果要调用子类重写的方法,向下转型。向上转型还提升了扩展性,即:不需要创建子类实例
七、面向对象三大特征
1、封装:提高了安全性。
2、继承: 程序扩展性
3、多态:减少代码重复,提升扩展。没有方法重写,就没有多态。
八、小知识
匿名对象:
下面括号里可以写m,或者用匿名对象直接写new Mouse()。
在实际应用中,把方法的参数设置为接口,非常好。