2014-09-02 136 views
0
public A { 

    public A(String arg0) { 
    ... 
    } 

    public A(String arg0, String arg1) { 
    ... 
    } 

} 

public B extends A { 

} 

我想B到自動具有構造從A繼承,而無需實現它們明確,如:構造繼承

public B(String arg0) { 
    super(arg0); 
} 
public B(String arg0, String arg1) { 
    super(arg0, arg1); 
} 

我怎樣才能做到這一點?

回答

8

你不能。構造函數不會被繼承。只有默認的超類自動調用,但仍不「繼承」。

編譯器會自動爲每個構造函數中的默認構造函數「super()」添加一個調用,除非顯式調用構造函數,並且提供的超類具有默認構造函數。此外,如果一個類沒有明確定義一個構造函數,編譯器將提供一個默認的空函數,如前所述,它調用super()的默認構造函數。

這就是爲什麼它「看起來」的默認構造函數是「繼承」,但它只是一個編譯器技巧。

+0

如果超類沒有默認構造函數,編譯器會給出錯誤,因爲它不能插入「super()」調用,並且需要顯式調用其中一個非默認構造函數。或者我錯過了什麼? – 2014-09-02 18:26:52

1

你不能。構造函數不在類之間繼承,每個子類構造函數都必須調用超類構造函數作爲其第一個操作(顯式或隱式)。

2

你不能。作爲建設者不能在孩子繼承classes.If我們不寫在一個類中的任何構造函數,一個默認的是provided.By使用super關鍵字,我們可以調用父類構造函數,但有一個條件,即它不寒而慄是兒童構造函數中的第一個聲明。