2016-06-13 9 views
5

Ich habe gerade angefangen, das Spring-Framework zu lernen, und ich habe ein Tutorial auf javatpoint.com gefunden.Java - Verwendung von super() in dem gegebenen Beispiel

ich diesen Code haben (nichts Besonderes, druckt nur einige Fragen und Antworten):

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; 
} 

Meine Frage ist: Warum ist er mit, dass leeren Konstruktor und dem Schlüsselwort super() ? Die App funktioniert ohne sie und ich bekomme nicht, wofür sie in diesem Code gut sind.

P.S. : Es gibt keine Superklasse oder so etwas.

+4

Es ist nicht notwendig, 'super()' explizit aufzurufen. Der Compiler fügt ihn ein, wenn er weggelassen wird (vorausgesetzt, die Superklasse hat einen "no-arg ctor"; andernfalls müssen Sie sie explizit aufrufen). –

+0

@AndyTurner Also keine Notwendigkeit, 'super()' zu verwenden. Aber was ist mit dem leeren Konstruktor 'Question()'? –

+0

Es wird sichergestellt, dass Objekt erstellt werden kann, ohne Parameter zu übergeben –

Antwort

4

Ein No-Arg-Konstruktor (zB Question()) kann in mehreren Fällen nützlich sein - wenn Sie eine Klasse als Bean verwenden und seine Member initialisieren, serialisieren über GWT, etc .. Ohne Kontext Im Beispiel ist dies in der Tat redundant.

Der Aufruf an super() ist vollständig redundant und würde implizit ausgeführt, wenn kein [anderer] Aufruf an super angegeben ist.

1

Leere Konstruktor wird in den meisten Fällen nicht benötigt, nur wenn Sie Ihre Klasse in einem schlechten Framework wie Hibernate oder JPA verwenden, wo Sie leere Konstruktor für das Framework benötigen, um Ihre Klasse zu erstellen. Dann ist der leere Konstruktor für das Framework und nicht-leere ist in der Regel für Tests oder andere Verwendungen.

Im obigen Beispiel sehe ich keinen Hinweis, dass Sie solch ein Framework verwenden, so dass dieser leere Konstruktor nicht benötigt wird.

Wie für die super() wird es überhaupt nicht benötigt.

0

Jede Klasse, die eine andere Klasse nicht explizit erweitert, erweitert java.lang.Object. So ruft super() einfach den no-arg-Konstruktor von Object auf.

Expliziter Aufruf ist nicht notwendig, da der Compiler es für Sie hinzufügen würde. Sie müssen nur einen super() -Aufruf in einem Konstruktor hinzufügen, wenn Sie einen Superklassenkonstruktor mit Argumenten aufrufen möchten.

Also, Ergebnis wird gleich sein, ob Sie Super() Konstruktor hinzufügen oder nicht.

Verwandte Themen