2014-10-08 114 views
0

我一直認爲使用子類創建對象時,我們需要明確地使用super(arguments list)來調用超類的構造函數。但是,我做了一個實驗,並意識到,即使使用super()而不是,即使,超類的構造函數也會自動調用。這是真的?在這種情況下調用super的構造函數是多餘的嗎?

如果這是真的,什麼時候是super()冗餘,什麼時候不是?

class Parent 
{ 
    public Parent() 
    { 
     System.out.println("Super Class"); 
    }   

} 

class Child extends Parent 
{ 
    public Child() 
    { 
     super(); //Is this redundant? 
     System.out.println("Sub Class"); 
    } 
} 

public class TestClass 
{ 
    public static void main(String[] args) 
    { 
     new Child(); 
    } 
} 

OUTPUT隨着​​在子類):

Super Class 
Sub Class 

OUTPUT沒有​​在子類):

Super Class 
Sub Class 
+0

超級存在隱藏即使您不要調用 – 2014-10-08 18:54:19

+1

當您需要將參數傳遞給它時,您必須調用super()構造函數,否則如果不調用它,不會調用不帶參數的super()。 – 2014-10-08 18:55:26

+0

所以我們明確地調用超類的構造函數中有參數的時候嗎? – user3437460 2014-10-08 18:55:46

回答

0

通過德發ult super()被添加到所有子類中,因此不需要明確調用它。

默認行爲可以通過使用super(args)調用超類的重載構造函數或使用this(args)的相同類的重載構造函數來重寫。

假設超類沒有無參數構造函數,並且您創建了其他構造函數,那麼您必須顯式調用super(args)來解決編譯時錯誤。

0

有疑問時,隨時諮詢the specification

如果構造體不明確的構造函數調用,並正在申報的構造開始不是原始類對象的一部分,然後在構造函數體隱式開始具有超類構造函數調用「​​」,它的直接超類的構造函數的調用不帶任何參數。

相關問題