|
Power Member
|
我也不清楚我的想法對不對, 不過我是這樣子想的.
1. overloading => 使用相同 function 名稱的不同 function (有不同的參數)
2. overriding => 子類別直接取代原父類別的功能.
3. polymorphism => 我也想不出白話的解釋, 不過以你的例子來看.
父 class 是 "animal" (動物), 有兩個繼承動物的子類別 "human" (人) 與 "bird" (鳥). 類別有個 function 是 "getLegs" (四肢).
各自使用各自的 class 時, 並沒有 polymorphism 的問題.
如在單獨操作 "human" 這個類別的 instance 時, 會傳回 "兩手兩足", 在單獨操作 "bird" 這個類別的 instance 時, 會傳回 "兩翅兩足".
用程式來看就是:
bird b = new bird;
b.getLegs() 傳回 "兩翅兩足".
human h = new human;
h.getLegs() 傳回 "兩手兩足".
而 polymorphism 會發生在於你是用父類別來操作這些子類別的時候.
如:
animal a1 = new bird;
a1.getLegs() 傳回 "兩翅兩足".
anumal a2 = new human;
a2.getLegs() 傳回 "兩手兩足".
也就是 a1, a2 都是 animal (動物), 但實際上 a1 是 bird (鳥) 這種 animal (動物), a2 是 human (人) 這種 animal (動物).
但是當程式比較複雜時, 你可能會有某個 function 是針對 animal 去操作的, 這時, 在那個 function 中, 只知道是對 animal 操作, 不會知道是對 bird 還是 human 操作, 這就叫 polymorphism.
如:
function GetAnimalLegs(animal *a)
{
return a->getLegs(); // 你不會知道這是什麼, 要看執行時傳進來的是什麼而定.
}
|