**:
1、抽象類是可以有建構函式的。但很多人認為,建構函式用於例項化乙個物件(或建立乙個物件的例項),而抽象類不能被例項化,所以抽象類不應該有公共的建構函式(fxcop.設計規則)。但不應該有「公共」的建構函式,和不應該有建構函式,這是兩個不同的概念,所以,fxcop.設計規則中也說,如果抽象類需要建構函式,那麼應該宣告為「protected」。
2、既然抽象類是可以,甚至有時候應該有建構函式,那抽象類的建構函式的作用是什麼?我覺得至少有兩個:
(1)初始化抽象類的成員;
(2)為繼承自它的子類使用。
比如以下例子:
public abstract class component
public abstract void add(component component);
public abstract void remove(component component);
} public class composite : component
public override void add(component component)
public override void remove(component component)
} 3、即使我們宣告乙個沒有建構函式的抽象類,編譯器還會為我們生成乙個預設的保護級別的建構函式。
子類例項化時(不管是否為帶參構造)只會呼叫所有父類的無參建構函式,而帶參構造必須通過顯式去呼叫。呼叫順序是先呼叫抽象類的無參建構函式,如果子類例項化時是使用帶餐的建構函式,則再接著呼叫抽象類的帶參建構函式,最後呼叫子類本身的建構函式。
建構函式與抽象類
由於函式前面加了abstract,所以變成抽象類,抽象類不能直接被例項化,需要建立乙個子類整合,然後通過子類才能呼叫裡面的方法。簡單的說,抽象類的重點在於當中的抽象方法,抽象方法定義了乙個大體的方法,具體的方法實現方式由繼承它的類去實現。比如說,抽象方法定義了乙個框架,那麼這個框架是方是圓還是菱形它...
PHP抽象類構造
那麼在php中也是一樣的,把乙個類進行抽象,可以指明某個類的一般行為,這個類可以是乙個模板,而繼承他的子類中的方法就要去 具體的實現模板的相應功能 注意這裡是模板的全部功能 下面是我總結的一些注意點 1.定義的方法,子類必須完全實現這個抽象中所有的方法。2.不能從抽象類建立物件,物件要讓繼承他的子類...
PHP抽象類構造
那麼在php中也是一樣的,把乙個類進行抽象,可以指明某個類的一般行為,這個類可以是乙個模板,而繼承他的子類中的方法就要去 具體的實現模板的相應功能 注意這裡是模板的全部功能 下面是我總結的一些注意點 1.定義的方法,子類必須完全實現這個抽象中所有的方法。2.不能從抽象類建立物件,物件要讓繼承他的子類...