多态
概念
多态性的前提:
extends继承或者implements实现
多态:同一个行为,具有多种不同表现形式
一个对象拥有多种形态,这就是对象的多态性
定义格式
多态性的具体体现:父类指向子类对象(左侧父类的引用,指向了右侧子类的对象)
格式:
父类名称 对象名 = new 子类名称();
接口名称 对象名 = new 实现类名称();
多态中成员的使用特点
1.成员变量
多态中成员变量不能被覆盖/重写
访问成员变量的两种方式:
1.直接通过对象名称访问成员对象,看等号左边是谁,优先用谁,没有则向上找。“编译看左边,运行看左边”
2.间接通过成员方法访问:子类重写就是子,子类没有重写就是父。“编译看左边,运行看右边”
2.成员方法
在多态中,成员方法的访问规则:看new的是谁,就优先用谁,没有的话就向上找。“编译看左边,运行看右边”
多态的优点
实际开发的过程中,父类类型作为方法形式参数,传递子类对象给方法,进行方法的调用,更能体现出多态的扩展性与便利。
引用类型转换
向上转型
对象的向上转型也就是多态的一般写法:
父类名称 对象名 = new 子类名称();
含义:右侧创建了一个子类对象,把它当作父类来看待去使用
注意事项:
1.向上转型一定是安全的(从小范围到大范围)
2.对象向上转型为父类,就无法调用子类原本特有的内容
Tips:
向上转型可以类比为自动类型转换
向下转型
对象的向下转型是一个【还原】的动作:
子类名称 对象名 = (子类名称)父类对象;
含义:将父类对象,【还原】成为本来的子类对象
注意事项:
1.必须保证对象本来创建的时候就是A对象,这样才能向下转型为A
2.对象本来创建的时候不是A对象,但是现在非要向下转型为A会报错:
java.lang.ClassCastExceprion
类转换异常
Tips:
向下转型可以类比为强制转换
用instanceof关键字进行类型判断
使用instanceof关键字可以知道一个父类的引用对象原本是哪个子类
格式:
对象 instanceof 类名称
会得到一个Boolean值类型的结果,也就能用来判断前面的对象能不能用来当作后面类型的实例
例如:animal instanceof Dog
转型的使用场景
将父类对象,【还原】成为本来的子类对象,进而去调用子类原本特有的内容
转型的异常
java.lang.ClassCastExceprion
类转换异常