參考文章:5.5 多態(polymorphism)
多態的要點:
1. 多態是方法的多態,不是屬性的多態(多態與屬性無關)。
2. 多態的存在要有3個必要條件:繼承,方法重寫,父類引用指向子類對象。
3. 父類引用指向子類對象後,用該父類引用調用子類重寫的方法,此時多態就出現了。
代碼
class Animal {
public void shout() {
System.out.println("叫了一聲!");
}
}
class Dog extends Animal {
public void shout() {
System.out.println("旺旺旺!");
}
public void seeDoor() {
System.out.println("看門中....");
}
}
class Cat extends Animal {
public void shout() {
System.out.println("喵喵喵喵!");
}
}
public class TestPolym {
public static void main(String[] args) {
Animal a1 = new Cat(); // 向上可以自動轉型
//傳的具體是哪一個類就調用哪一個類的方法。大大提高了程序的可擴展性。
animalCry(a1);
Animal a2 = new Dog();
animalCry(a2);//a2爲編譯類型,Dog對象纔是運行時類型。
//編寫程序時,如果想調用運行時類型的方法,只能進行強制類型轉換。
// 否則通不過編譯器的檢查。
Dog dog = (Dog)a2;//向下需要強制類型轉換
dog.seeDoor();
}
// 有了多態,只需要讓增加的這個類繼承Animal類就可以了。
static void animalCry(Animal a) {
a.shout();
}
/* 如果沒有多態,我們這裏需要寫很多重載的方法。
* 每增加一種動物,就需要重載一種動物的喊叫方法。非常麻煩。
static void animalCry(Dog d) {
d.shout();
}
static void animalCry(Cat c) {
c.shout();
}*/
}