abstract類是抽象類,不能夠實例化,大家都知道,abstract類往往和接口interface一塊兒使用,針對接口中一些公共的方法進行實現,然后實體類去繼承抽象類和接口。雖然abstract類不能實例化,但是abstract類可以有構造函數,其構造函數和實體類的構造函數沒什么區別。如下:
abstract class A { public A() { Console.Write("A "); } public virtual void Method() { Console.Write("AMethod "); } } class B:A { public B() { Console.Write("B "); } public new void Method() { Console.Write("BMethod "); } }
今天遇到一個問題是這樣:
A o = new B(); o.Method();
猜想輸出結果是什么呢?我第一眼給出的答案是B AMethod;在我想象中抽象類A不能夠實例化,所以A的構造函數無效。
運行以后發現答案是A B AMethod;這說明了abstract類的構造函數和類的構造函數是一樣的,可以被子類繼承,只能不能用new創建而已。
