基礎程式設計(18)-多形概念

多形在物件導向中應該是最複雜的概念了,這個目的是「呼叫相同的方法進行不同的操作」,利用類別繼承來達到這個目的。當我們不確定使用的子類別是那一個時,可以把子類別”指定”給父類別,並且利用父類別進行方法的呼叫,這樣即使是相同的呼叫,只要指定的子類別不同,執行的程式碼也會不同。本篇直接利用範例作說明。

比如說當我們在玩遊戲的時候,每個人都會養不同的寵物。既然是不同寵物,走路的姿勢、戰鬥的方法也會不同。若是執行每個動作時都必須判斷一次寵物是什麼,這樣實在是太累人了,程式執行的效率也不好。這種時候就可以利用多形來解決。

首先我們建立一個寵物的抽象類別,既然是抽象類別就不能直接建立物件,只能寫子類別繼承。於是接著定義狗和狼二種動物繼承寵物類別,並定義實際動作的方式:

abstract class pet
{
    abstract void walk();
    abstract void run();
}
class Dog extents pet
{
    public Dog() { ... }
    public void walk() { ... }
}
class Wolf extents pet
{
    public Wolf() { ... }
    public void walk() { ... }
}
public class test
{
    public static void main(String[] args) {
        Dog myDog = new Dog();
        Wolf myWolf = new Wolf();

        move(myWolf);
        pet myPet = myDog;
        myPet.walk();
    }
    public void move(pet myPet) {
        myPet.walk();
    }
}

雖然抽象類別 pet 不能建立實體副本,不過可以像 23 行把子類別指定給父類別,這樣在 24 行用父類別呼叫方法時,程式會自動執行第 9 行的方法。同樣的道理,22 行呼叫 move 方法時,把 (Wolf)myWolf 傳給了 (pet)myPet,所以 27 行呼叫時會執行第 14 行的方法。僅管 24 和 27 行指令一樣,執行的方法卻是完全不同的。

以上是多形概念的說明,希望對大家有幫助。