有了对象的多态性以后,内存中实际上是加载了子类中特有的属性和方法,但是由于变量声明为父类类型,导致编译时,只能调用父类中声明的属性和方法,子类特有的属性和方法不能调用。
在基本数据类型中两种类型之间有自动类型提升和强制类型转换:
而在对象中就有向下转型
此时需要用到向下转型:使用强制类型转换符
Person p1=new Man(); // Man是Person的子类型 Man m1=(Man)p1; m1.earnMoney(); //调用子类中的方法
使用强转是,可能出现ClassCastException的异常
为了保证向下转型不出现异常,需要在向下转型之前,先进行Instanceof的判断,true就进行向下转型,否则不进行转型
instanceof的使用:
if(p2 instanceof Woman){ Woman w1=(Woman)p2; w1.goShopping(); }