C# 抽象類別

      在〈C# 抽象類別〉中尚無留言

抽象類別的作用

為什麼要有抽象類別呢? 依前面的例子, new 出一隻Pikachu實屬正常. 但new 出一隻Pokemon, 是要叫他長成什麼樣子呢? Pokemon只是所有神奇寶貝的統稱, 是一個抽象的名詞而以. 所以new 出Pokemon事實上是沒有任何意義的。
為了讓這個抽象的名詞new 不出物件來, 就可以在class之前加上abstract.

另外一個目的, 是為了規範繼承的子類別必需遵求特定的契約, 也就是必需實作特定的方法, 這時就需在父類別加上抽象方法.

方式

請注意, 子類別實作父類別的抽象方法時, 必需加入overide這個關鍵字, 這個就跟Java不一樣了,JavaSE 7.0必需在方法之上加入 @Override

    abstract class Pokemon
    {
        public Pokemon()
        {
            Console.WriteLine("Pokemon出生");
        }
        abstract public void setLevel();
    }
    class Pikachu : Pokemon
    {
        public Pikachu():base()
        {
            Console.WriteLine("皮卡丘出生");
        }

        public override void setLevel()
        {
            
        }
    }

權限

父類別的抽象方法, 不可以為 private, 但是可以為protected, 預設, 或public, 這個跟Java 一樣。

而子類別實作抽象方法後, 其權限必需跟父類別一模一樣,  不能改變. 這個就又跟Java不一樣了. Java子類別方法權限必需寬鬆或等於父類別方法的權限.

發佈留言

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