2014-09-19 50 views
0

我在java中派生了一個類。 我注意到,超類構造函數在派生類構造函數中的代碼執行之前被調用。 有沒有反轉該順序的方法?構造函數在Java派生類中執行的順序

例子:

class Animal 
{ 

    public Animal() 
    { 
    //do stuff 
    } 
} 

class Cat extends Animal 
{ 
    int var; 
    public Cat(int v) 
    { 
    var = v; 
    super(); 
    } 
} 

這是我想做些什麼,但調用超()一樣,給出了一個錯誤......

+0

不,這是不可能的(至少在java中) – afzalex 2014-09-19 23:53:39

+1

這個問題可以通過閱讀Java語言參考來回答。 – 2014-09-20 00:06:49

+0

爲什麼這個問題投下來了? – 2014-09-20 00:07:07

回答

2

沒有,有沒有辦法顛倒順序。如果您顯式調用父類構造函數,則需要在構造函數的頂部執行它。稍後調用它將允許子類在構建之前訪問父類的數據。

2

不,您不能以這種方式反轉構造函數調用的順序。致電super()必須是構造函數中的第一條語句。如果沒有這樣的調用,Java插入一個隱式調用super()作爲第一個語句。

JLS, Section 8.8.7,指出:

一個構造體的第一個語句可以是同一個類的另一個構造的明確調用或直接超類的(§8.8.7.1)。

ConstructorBody: 
{ [ExplicitConstructorInvocation] [BlockStatements] } 
1

沒有一個方法來調用父類的構造之前運行子類的構造函數。這基本上就像在超類創建之前試圖創建子類一樣,這是不可能的,因爲子類依賴於超類屬性來創建。

相關問題