抽象類
抽象類是指設計為被繼承的類。抽象類只能被用作其他類的基類。
- 不能創建抽象類的實例。
- 抽象類使用abstract修飾符聲明。
- 抽象類可以包含抽象成員或普通的非抽象成員。抽象類的成員可以是抽象成員和普通帶
實現的成員的任意組合。 - 抽象類自己可以派生自另一個抽象類。例如,下面的代碼展示了一個抽象類,它派生自
另一個抽象類。
- 任何派生自抽象類的類必須使用override關鍵字實現該類所有的抽象成員,除非派生類
自己也是抽象類。
抽象類抽象方法的示例
下面的代碼展示了一個名為AbClass的抽象類,它有兩個方法。
第一個方法是一個帶有實現的普通方法,它打印出類型的名稱。第二個方法是一個必須在派
生類中實現的抽象方法。類DerivedClass繼承AbClass,實現并覆寫了抽象方法。創建
DerivedClass的對象并調用它的兩個方法。
abstract class AbClass //抽象類
{public void IdentifyBase() //普通方法{Console.WriteLine("I am AbClass");}abstract public void IdentifyBase(); //抽象方法
}class DerivedClass:AbClass //派生類
{override public void IdentifyDerived() //抽象方法的實現{Console.WriteLine("I am DerivedClass");}
}class Program
{static void Main(){//AbClass a=new AbClass(); //錯誤,抽象類不能實例化//a.IdentifyDerived();DerivedClass b=new DerivedClass();//實例化派生類b.IdentifyBase(); //調用繼承的方法b.IdentifyDerived(); //調用“抽象”ff}
}
輸出結果:
I am AbClass
I am DerivedClass
抽象類的另一個例子
如下代碼演示了包含數據成員和函數成員的抽象類的聲明。記住,數據成員(字段和常量)
不可以聲明為abstract。
abstract class MyBase //抽象和非抽象成員的組合
{public int SideLength=10; //數據成員const int TriangleSideCount=3; //數據成員abstract public void PrintStuff(string s); //抽象方法abstract public int MyInt{get;set;} //抽象屬性public int PerimeterLength() //普通的非抽象方法{return TriangleSideCount*SideLength;}
}class MyClass:MyBase
{public override void PrintStuff(string s) //覆蓋抽象方法{Console.WriteLine(s);}private int _myInt;public override int MyInt //覆蓋抽象屬性{get{return _myInt;}set{_myInt=value;}}
}class Program
{static void Main(string[] args){MyClass mc=new MyClass();mc.PrintStuff("This is a string.");mc.MyInt=28;Console.WriteLine(mc.MyInt);Console.WriteLine($"Perimeter Length:{mc.PerimeterLength()}")}
}
運行結果
This is a string
28
Perimeter Length:30