2015-08-27 71 views

回答

3

如果有一個超類的構造函數沒有顯式調用,編譯器將生成到super()通話。因此,你的例子沒有區別。

2

沒有差別,它只是一個明確和隱含的問題。在第二種情況下,如果它是從父類繼承的,則隱式地調用此Students類的超級構造函數。閱讀更多信息。你可以找到更多的信息,如果你谷歌它。

public class A { 
    //there is a hidden constructor. Even if you explicitly write it 
    //public A(){ 
    //} 
} 

public class B extends A { 
private int i; 


public B(int x){ 
    this.i = x; 
} 

} 

當您創建一個對象窗體B時,您首先隱式地調用A的構造函數。你可以明確指定它。

public B(int x){ 
     super(); 
     this.i = x; 
} 
0

super()只是調用該函數的父構造函數,並允許您傳遞諸如super(someArgument)之類的參數,或者可以用於調用父構造函數的方法,如super.someMethod()

super()獨自調用父構造函數而不傳遞任何參數或引用父類的任何方法。關於何時調用super()的實際決定取決於重寫方法的用途,以及當重寫某個方法時基類所期望的行爲。

結賬The Java™ TutorialsJavaTPoint瞭解更多信息。

0

Java的隱式調用父類的構造函數,如果你還沒有把它稱爲明確(構造函數鏈 - 在谷歌搜索這個詞更多信息)。即使你的類沒有明確從任何類繼承,Java隱式地使它繼承了Object類(並且調用了Object類的構造函數)。

所以,他們之間沒有區別。

1

具有超級功能但沒有超級功能的構造之間有什麼區別。

那麼,它可以很容易地測試。他們對這種情況實際上是一樣的。 更重要的是,您可能想知道何時以及如何使用super

運行以下代碼:

public class Test 
{    
    public static void main(String[] args) 
    {  
     new Students("a", "b"); 
    } 
} 

class Parent 
{ 
    public Parent(){ 
     System.out.println("Parent class constructor invoked"); 
    } 
}  

class Students extends Parent 
{ 
    String name; 
    String address; 

    public Students(String name, String address) { 
     super(); 
     this.name = name; 
     this.address = address; 
    } 
} 

OUTPUT: 父類的構造調用

現在我們刪除super();

class Students extends Parent 
{ 
    String name; 
    String address; 

    public Students(String name, String address) { 
     this.name = name; 
     this.address = address; 
    } 
} 

OUTPUT: 父類的構造調用

就像如何類隱含延伸到Object,即使你不把它們擴展到一些東西。 「默認情況下」一個​​將在每個構造函數中被調用,如果你沒有給出。

+0

很好的解釋@ user3437460 –

+0

@Tarikhelian很高興它幫助;) – user3437460

相關問題