- 有了对象的多态性之以后,内存中实际上是加载了子类特有的属性和方法的,但是由于变量声明为父类类型,导致编译时,只能调用父类中声明的属性和方法,子类特有的属性和方法不能调用
- 如何调用子类特有的属性和方法?(见以下代码)
向下转型,使用强制转换符。(类比于自动类型提升和强制类型转换)
Person p1 = new Man();
Man m1 = (Man)p1;
instanceof关键字的使用
使用强转时,可能出现ClassCastException的异常,此时使用如下关键字
a instanceof A
:判断对象a是否是类型A的实例。如果是,返回true,如果不是,返回false
if(p2 instanceof Woman) {//如果p2是Woman类型,则进行强制类型转换,则调用Woman类的方法
Woman w1 = (Woman)p2;
w1.goShopping();
}
使用情境:为了避免ClassCastException的异常,在向下转型之前, 先进行instanceof的判断,一旦返回true,就进行向下转型,如果返回false,不进行向下转型
- 如果
a instanceof A
返回true,则a instanceof B
也返回true
其中,B是A的父类