多态的定义:指允许不同类的对象对同一消息做出响应。即同一消息可以根据发送对象的不同而采用多种不同的行为方式。(发送消息就是函数调用)
多态的作用:消除类型之间的耦合关系。
多态存在的三个必要条件
一、要有继承;二、要有重写;
三、父类引用指向子类对象。
栗子:现实中,关于多态的例子不胜枚举。比方说按下 F1 键这个动作,如果当前在 Flash 界面下弹出的就是 AS 3 的帮助文档;如果当前在 Word 下弹出的就是 Word 帮助;在 Windows 下弹出的就是 Windows 帮助和支持。同一个事件发生在不同的对象上会产生不同的结果。
Java中多态的实现方式:接口实现,继承父类进行方法重写,同一个类中进行方法重载。
程序小栗子:
abstract class Animal { abstract void eat(); } class Cat extends Animal { public void eat() { System.out.println("吃鱼"); } public void catchMouse() { System.out.println("抓老鼠"); } } class Dog extends Animal { public void eat() { System.out.println("吃骨头"); } public void kanJia() { System.out.println("看家"); } } class DuoTaiDemo { public static void main(String[] args) { function(new Cat()); function(new Dog()); Animal a = new Cat();//向上转型 a.eat(); Cat c = (Cat) a;//向下转型 c.catchMouse(); } public static void function(Animal a) { a.eat(); //用于子类型有限 //或判断所属类型进而使用其特有方法 if (a instanceof Cat) { Cat c = (Cat) a; c.catchMouse(); } else if (a instanceof Dog) { Dog c = (Dog) a; c.kanJia(); } } }
Output:
吃鱼
抓老鼠
吃骨头
看家
吃鱼
抓老鼠