一、多态介绍
多态:即多种状态。是指方法或对象具有多种状态。
面向对象三大特征之一。
是建立在封装和继承之上的。
二、方法的多态
方法的重写和重载可以体现多态。(注意:方法的重写和重载发生在具有继承关系的子类和父类之间)—这也说明了多态是建立在继承和封装的基础之上的。
三、对象的多态
子类和父类之间,
在new一个对象时:如Animal animal=new Dog();
(1)等号=左边是编译类型,等号=右边是运行类型。
如animal的左边是编译类型Animal类,右边是运行类型是Dog类。
(2)编译类型和运行类型可以不一致。
(3)且编译类型在定义对象时,就确定了,不能改变。
(4)运行类型可以改变。
(运行类型不同也可体现出多态,编译类型和运行类型不一致也可体现出多态。)
如Animal animal=new Dog();
父类Animal做编译类型作为子类Dog的引用。
四、细节
多态注意事项和细节
1.属性没有重写之分(方法才有),属性值看编译类型。
2.instanceof比较操作符,用于判断对象的类型是否为XX类型或XX类型的子类型。
如aa instanceof BB
判断aa是否是BB类,或是BB类的子类。
向上转型
语法:父类类型 引用名=new 子类类型();
如Animal animal=new Dog();
即父类做为子类对象的引用。
可调用父类中所有方法(按访问规则,即不能访问private等)
但不能调用子类中特有方法。
向下转型
(1)语法:子类类型 引用名=(子类类型)父类引用。
如Dog dog=(Dog)animal;
(此处animal必须是Dog的父类引用,才能进行下转)
(2)注意:强转的是父类的引用而不是父类的对象。
(3)父类引用必须指向该子类的对象,才能转为该子类。
(4)向下转型后可以调用该子类中的所有成员(按修饰符范围)。
多态的动态绑定机制。
1.调用方法时,方法与运行对象的地址进行绑定。
2.调用对象属性时,属性无动态绑定机制。
多态的应用
1.多态数组
父类[] 引用名=new 父类[?];
如AA a=new AA[5];
2.多态参数
在方法的参数列表中,父类作形参,子类作实参。
如public void show(Object o){}
Object作为形参,传入一个子类作为实参。
五、优点
提高了代码的复用性,利于代码维护。