何謂多型
當我們有二個類別, 父類別是 Pokemon, 子類別Pikachu繼承Pokemon. 如下
class Pokemon{} class Pikachu : Pokemon{}
當我們new 出Pikachu時, 可以使用父類別參考(Reference), 比如
Pokemon p=new Pikachu();
當我們new出Pikachu時, 其型態卻是Pokemon, 這種方式稱為多型, 他既是一隻皮卡丘, 也是一隻神奇寶貝. 但當我們使用神奇寶貝稱呼他時, 子類別的擴充功能將會消失.
為什麼呢, 怎麼記呢? Pikachu可以擴充閃電攻擊的攻能, 但使用神奇寶貝稱呼時, 閃電攻能將會失效, 因為並不是所有的神奇寶貝都可以使用閃電攻擊.
class Pokemon{}
class Pikachu : Pokemon
{
public void lighting() { }
}
---------------------------------------------
Main(){
Pokemon p=new Pikachu();
p.lighting(); //這個將會是錯誤的
}
多型的用意
一個物件, 可以是可以多重身份的, 比如皮卡丘, 除了是皮卡丘之外, 他還是神奇寶貝的一種, 他也是小智的朋友. 這種多重身份的表示法, 就是多型的目的.
假設我們有三個類別, 分別是 Pokemon, Pikachu, Eve
class Pokemon{} class Pikachu : Pokemon { public void lighting() { } } class Eve : Pokemon { }
當我們在Main中創造出Pikachu [] 陣列後, 在陣列中的物件, 只能是Pikachu, 不能容納Eve
但如果我們創造出Pokemon[] 陣列, 則這個陣列可以容納Pikachu及Eve
代碼如下
Pikachu[] pi = new Pikachu[10]; pi[0] = new Pikachu(); pi[1] = new Eve(); //此行錯誤 Pokemon[] po = new Pokemon[10]; po[0] = new Pikachu(); po[1] = new Eve();