学本节之前,可以先复习 小朋友学C++(12):多态
多态是同一个行为具有多个不同表现形式或形态的能力。
例1:打印机
例2:按下键盘的F1键 如果当前是在Win 7的桌面,会弹出“Windows帮助和支持” 如果当前是在Word界面,会打开Word的帮助页面 如果当前是在IE浏览器窗口,会打开“Internet Explorer帮助”
联想一下花木兰替父从军的故事,多态的存在有三个前提 1 要有继承关系 2 子类要重写父类的方法 (这里父类的方法,可以是抽象方法,也可以是普通方法) 3 父类引用指向子类对象
abstract class Animal {
abstract void eat();
}
class Cat extends Animal {
public void eat() {
System.out.println("吃鱼");
}
public void work() {
System.out.println("抓老鼠");
}
}
class Dog extends Animal {
public void eat() {
System.out.println("吃骨头");
}
public void work() {
System.out.println("看家");
}
}
public class MTest {
public static void main(String[] args) {
Animal a = new Cat(); // 向上转型
a.eat(); // 调用的是 Cat 的 eat
if(a instanceof Cat) {
Cat c = (Cat)a; // 向下转型
c.work(); // 调用的是 Cat 的 work
} else if(a instanceof Dog) {
Dog d = (Dog)a;
d.work();
}
Animal a2 = new Dog();
a2.eat();
if(a2 instanceof Cat) {
Cat c = (Cat)a2;
c.work();
} else if(a2 instanceof Dog) {
Dog d = (Dog)a2;
d.work();
}
}
}
运行结果: