多态是Java面向对象的三大特征之一
多态:是指允许不同类的对象对同一消息做出响应。即同一消息可以根据发送对象的不同而采用多种不同的行为方式。(发送消息就是函数调用)
要想使用多态要满足三个条件:
1、要有继承
2、要有重写
3、父类引用指向子类对象
多态的实现方式有两种:向上造型,向下造型
向上造型:父类型的变量引用子类型的对象
(1) 父类型的变量指向不同的子类型对象,调用的功能有不同的实现
//Animal父类,子类Dog继承了父类Animal
Animal a = new Dog();
a.noise();//叫
a = new Cat();
a.noise();//叫
(2)不同的父类型变量指向同一个对象有不同的功能
ZhengYangDoor a = new ZhengYangDoor();
a.theftproof();//防盗
a.openDoor();//开门
//父类变量指向不同子类时,同样的方法会有着不同的结果
InterA ia = a;
ia.theftproof();
向下造型:将父类型(接口)的变量赋值给子类型或者是其他父类型(接口)的变量
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;
}