2016-06-13 84 views
5

我剛開始學習Spring框架,並在javatpoint.com上找到了一些教程。Java - 在給定示例中使用super()

我有了這個代碼(沒什麼特別的,只打印了一些問題和答案):

private int id; 
private String name; 
private Map<Answer,User> answers; 

public Question(){} 
public Question(int id, String name, Map<Answer,User> answers){ 
    super(); 
    this.id = id; 
    this.name = name; 
    this.answers = answers; 
} 

我的問題是:爲什麼他使用空的構造和關鍵字超() ?該應用程序沒有他們,我不明白他們在這段代碼中的優點。

P.S. :沒有超級類或類似的東西。

+4

沒有必要顯式調用'super()'。如果省略,編譯器會插入它(前提是超級類沒有參數,否則必須顯式調用它)。 –

+0

@AndyTurner所以不需要使用'super()'。但是空構造函數Question()'怎麼樣? –

+0

它將確保可以在不傳遞參數的情況下創建對象 –

回答

4

在幾種情況下,無參數構造函數(如Question())可能會有用 - 如果您將類用作bean並希望懶惰地初始化其成員,通過GWT序列化它等。在示例中提供,這確實是多餘的。

super()的呼叫是完全多餘的,並且如果沒有指定super的[其他]呼叫被指定,將隱含地執行。

1

大多數情況下不需要空構造函數,只有當您在類似Hibernate或JPA的不良框架中使用類時,需要空構造函數才能創建類。 然後,空構造函數用於框架,而非空構造函數通常用於測試或其他用法。

在上面的示例中,我沒有看到任何證據表明您使用此類框架,因此不需要此空構造函數。

至於super()它根本不需要。

0

沒有明確擴展另一個類的每個類都隱式擴展java.lang.Object。所以super()只是調用Object的無參數構造函數。

顯式調用是不必要的,因爲編譯器會爲您添加顯式調用。當你想用參數調用超類構造函數時,只需要在構造函數中添加一個super()調用。

因此,無論您是否添加super()構造函數,結果都是一樣的。