面向对象特征之三:多态性
1.理解多态性: 可以理解为一个事物的多种形态。
2.何为多态性:
对象的多态性:父类的引用指向子类的对象
3. 多态的使用:虚拟方法调用
有了对象的多态性以后,在编译期,只能调用父类中声明的方法,但在运行期,实际执行的是子类重写父类的方法。
总结:编译看左边,运行看右边
4. 多态性的使用前提: ①类的继承关系 ②方法的重写
5. 对象的多态性只适用于方法,不适用于属性
有了对象的多态性以后,内存中实际上是加载了子类特有的属性和方法,但是由于变量声明为父类类型,导致编译时,只能调用父类中声名的属性和方法。子类特有的属性和方法不能调用。
如何才能调用子类特有的属性和方法?
向下转型:使用强制类型转换
Person p = new Man();
Man m = (Man) p;
使用强转时,可能会出现ClassCastException的异常。
instanceof关键字的使用
a instanceof A:判断对象a是否是类A的实例。如果是,返回true;如果不是,返回false
使用情境:为了避免在向下转型时出现ClassCastException的异常,我们在向下转型之前,先进行instanceof的判断,一旦返回true,进行向下转型,否则不进行向下转型。
如果a instanceof A 返回true,则 a instanceof B也返回true
其中B是类A的父类