多态的概念
生活中:同一个动物在不同环境下表现出来的不同状态
Java中:同一个方法不同的对象中体现出来不同的状态
内存中: 父类引用指向子类对象
多态的实现必要条件
1.存在继承关系
2.存在方法重写
3.父类引用指向子类对象
多态访问成员的特点
成员变量:编译时看左边类型,如果左边类型中没有变量会编译报错
运行时期看左边类型,左边类型的变量的值就是运行的结果
编译看左边,执行看左边
成员方法: 编译看左边,执行看右边
构造方法:多态访问子类构造方法会先访问父类构造方法
帮助子类初始化父类继承过来的成员
静态方法:编译看左边,执行看左边(静态方法不能被子类继承)
多态的优点
简化了代码
提高了维护性和扩展性
多态的缺点:使用父类引用无法访问子类所特有的方法
解决办法:向下转型
基本类型存在自动类型转换和强制类型转换
引用类型存在向上转型和向下转型
向上转型(自动转换)
格式:<父类型> <引用变量名> = new <子类型>();
特点:
子类转为父类,父类的引用指向子类对象,理解为自动进行类型转换
此时通过父类引用变量调用的方法是子类覆盖或者继承父类的方法
此时通过父类引用变量无法调用子类特有的属性和方法
向下转换(强制转换)
格式:<子类型><引用变量名>=(<子类型>)&l