多态:面向对象的特征之一。
向上造型:父类型的变量引用子类型的对象
(1)父类型的变量指向不同的子类型对象,调用的功能有不同的实现。
eg:Animal a = new Dog();
a.noise();//叫
a = new Cat();
a.noise();//叫
(2)不同的父类型变量指向同一个对象有不同的功能。
eg:ZhengYangDoor a = new ZhengYangDoor();
a.theftproof();//防盗
a.openDoor();//开门
InterA ia = a;
ia.thefiproof();
向下造型:
将父类的变量赋值给子类或者其他父类型的变量。
Animal a = new Dog();
Dog dog = (Dog)a;
dog.吃骨头();
Cat cat = (Cat)a;//编译通过,运行期间,类型转换错误(狗和猫不是一种类型,仅仅是同一个父类而已)
cat.捕捉老鼠();
运行期间有可能会发生类型转换异常:java.lang.ClassCastException
为了避免出现错误:我们需要使用关键字instanceof来判断对象是不是要转换成的类型
if(a instanceOf Cat){
Cat cat = (Cat)a;
}