2013-03-13 55 views
4

有一類U1,這是繼承類U. U類是空的......構造函數this()不必要?

在U1的構造有這行頭,父類的構造函數...

public U1(Plate plate, int order) 
{ 
    super(plate, order); 
... 

} 

現在我想要刪除U1類,並在U類中做到目前爲止在U1中做的任何事情...... 因此,現在我不需要調用超類的構造函數,因爲U類不會有任何超類...

this(plate, order)是不必要的,我可以省略它嗎?

這是我的U形構造是怎麼會是這樣的:

public U(Plate plate, int order) 
    { 
     this(plate, order); 
    ... 

    } 

回答

8

這是不必要的,我希望它會導致堆棧溢出,因爲您從構造函數中調用構造函數本身。

+2

事實上,它甚至沒有獲得遠遠不夠是一個堆棧溢出。它永遠不會運行。 – 2013-03-13 08:41:11

0

不是你可以忽略它。你必須忽略它,否則它會作爲一個永不結束的遞歸調用。

7

這會導致編譯錯誤。 JLS section 8.8.7說:

"It is a compile-time error for a constructor to directly or indirectly invoke itself through a series of one or more explicit constructor invocations involving this ."

在這種情況下,構造函數直接調用自己。

+2

+1,很好! 'javac'確實會返回錯誤'遞歸構造函數調用'。 – 2013-03-13 08:40:41

0

我們在構造函數中調用super()以初始化從超類繼承的實例變量,所以如果沒有超類 - 不存在java.lang.Object,則不需要調用super()。 如果多構造函數在哪裏,我們可以通過this()來調用其他構造函數,但不要自己調用構造函數,這會導致以前人們所稱的壞事。

樣品
1

如下,我們將得到錯誤:遞歸的構造函數調用,

class TestConstruct{ 
public TestConstruct(){ 
    this(); 
    System.out.println("constructor of Test class"); 
}//end of constructor 
}//end of class TestConstruct 
public class AppConstruct{ 
public static void main(String[] a){ 
Test t = new Test(); 
}//end of main 
}//end of AppConstruct 
相關問題