2011-03-22 108 views
4

我在Java中讀過「構造函數沒有繼承」的地方。另一方面,如果我沒有明確地調用super,Java會自動調用沒有參數的超類構造函數(在這種情況下必須存在這樣的構造函數)。「構造函數沒有被繼承」究竟意味着什麼?

是不是自動調用超類構造函數(不帶參數)的一種繼承形式?

「構造函數沒有被繼承」究竟意味着什麼?

回答

9

這意味着你不能創建一個子類,使用超類的構造函數 - 如果子類沒有聲明它的話。一個例子;

class A { 
    A() {} 
    A(String s) {} 
} 

class B extends A {  
} 

現在你可以這樣做:

B b = new B("testing"); 
+0

答案中的代碼將不會編譯,因爲B類具有隱含的默認無參構造函數,它嘗試調用A中的類似構造函數,但A類由於它定義了構造函數,因此未定義此默認構造函數。 – 2011-03-27 12:29:42

+0

我編輯了你的答案,爲類A添加了一個顯式的無參數構造函數。 – 2011-03-27 12:30:00

6

這意味着只是因爲你的超類有一個構造函數並不意味着子類將自動獲得相同的構造函數;你必須手動定義它。

默認的構造函數是一種異常,而不是。它是爲你自動定義的,但它不是「繼承」的,因爲它仍然是子類的一部分;它不是超類的成員。

+0

+1的默認構造函數引用。 – 2011-03-22 19:50:34

相關問題