三、多态
1. 理解:
(1) 多态:父类型的引用中存储子类型的对象
父类类名 引用名 = new 子类类名 ();
引用 对象
父类型 子类型
(2) 以父类型的引用调用属性或是方法,只能调用父类中定义的属性和方法
(3) 如果子类覆盖了父类中的方法,则运行时优先使用子类覆盖的方法
2. 引用之间的转换:
(1)将父类型的引用赋值给子类型的引用,需要强制转换类型
大类型 小类型
a. 子类类名 引用名 = (子类类名)父类型的引用名;
b. 结果:
i.实际存储对象类型和要转换的类型一致,编译通过,运行也通过
ii.实际存储对象类型和要转换的类型不一致,编译通过,但是运行报错,错误信息为: java.lang.ClassCastException(类型转换异常)
(2)将子类型的引用赋值给父类型的引用,直接赋值即可
a. 父类类名 引用名 = 子类型的引用名;
b. 例如:
Dog d = new Dog();
Animal a = d; // 体现多态
(3)不存在继承关系的双方,不能相互赋值,强制类型也不可以
Animal a = new Dog();
Person p = (Person)a;// 编译报错
3. 利用instanceof 避免类型转换异常:
(1) 语法:引用名 instanceof 类名
(2) 原理:判断引用中存储的类型是否兼容于后面的类型(是否为后面的一种),是-true;不是-false
(3) 作用:避免类型转换异常