2013-12-23 30 views
0

下面的代碼不能工作,我不明白理由,爲什麼會這樣?如果我可以找到一種方法來在另一個重寫的構造函數中調用構造函數?java構造函數被稱爲anthor覆蓋在執行

通過,我知道可以有一個解決方案,把普通的init代碼放在一個類的函數中。所以,請原諒我這個棘手的問題。

Public AClass extends BClass { 
    AClass(Context c) { 
     super(c); 
     //below has common init code 
     //init data and some operations 
     // other operations 

    } 

    AClass(Context c, Attr a) { 
     super(c, a); 
     this(c) // error 
    } 
} 

也,下面也不能正常工作,

AClass(Context c, Attr a) : this(c) { 
    super(c, a); 
} 

高度讚賞你的善意幫助。

回答

2

在構造函數的相同定義中,不能同時調用super()(超類構造函數)以及this()(重載構造函數)。

在java語言規範中,您必須調用超類構造函數或調用其他重載構造函數作爲構造函數定義中的第一行。這清楚地表明你不能一個接一個給他們打電話。

理想情況下,在這種情況下,您必須調用重載構造函數,最終將調用超類構造函數。請致電stack-overflow link

3

根據什麼BClass的構造做,下面可能的工作:

public AClass extends BClass { 
    AClass(Context c) { 
     this(c, (Attr) null); 
     // below has common init code 
     // init data and some operations 
     // other operations 
    } 

    AClass(Context c, Attr a) { 
     super(c, a); 
    } 
} 

您還可以從一個構造函數只有一個構造函數。您不能撥打this(另一個構造函數)super(超類的構造函數),並且您不能多次撥打thissuper。你只能將這些作爲構造函數的第一條語句。