C# 多型

      在〈C# 多型〉中尚無留言

何謂多型

當我們有二個類別, 父類別是 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();

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *