多态的前提:
子父类的继承关系
方法的重写
父类引用指向子类对象
Animal a = new Cat();
动态绑定:运行期间(用Java命令去运行一个类)调用的方法,是根据其具体的类型
编译期间:使用Java c编译器去编译一个类,把一个类编译成一个class文件
多态的成员特点:
成员变量:编译时看的是左边,运行时看的是左边,变量没有重写的概念
成员方法:编译时看的是左边,运行时看的是右边
静态方法:编译是看的左边,运行是看的是左边,使用变量去调用静态方法,相当于用变量类型的类名去调用。
总结:编译时看的一直是左边,因为编译是编译器检查,还未创建对象。但是运行时成员方法看的是右边其他(成员变量和静态方法)都是左边
多态中的向上转型和向下转型:
引用类型之间的转换
向上转型:
由小到大(子类型转换为父类类型)
向下转换:
由大到小:在使用多态的情况下,想要使用子类特有的成员时,需要向下转型。
基本数据类型的转换:
自动转换:
由小到大:byte short char ---- int ----long ----float----double
布尔类型不参与转换
强制转换:
由大到小:可能会损失精度
多态的优缺点:
优点:可以提高可维护性,提高代码的可扩展性
缺点:父类引用无法直接访问子类特有的成员