抽象類別的作用
為什麼要有抽象類別呢? 依前面的例子, 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子類別方法權限必需寬鬆或等於父類別方法的權限.