2016-06-13 22 views
5

Ho appena iniziato a imparare il framework Spring e ho trovato alcuni tutorial su javatpoint.com.Java: uso di super() nell'esempio fornito

Ho questo codice (niente di speciale, stampa solo alcune domande e risposte):

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

La mia domanda è: perché sta usando che costruttore vuoto e il super parola chiave () ? L'app funziona senza di loro e non ottengo ciò che è buono in questo codice.

P.S. : Non esiste una super classe o qualcosa del genere.

+4

Non è necessario chiamare esplicitamente 'super()'. Il compilatore lo inserisce se omesso (a condizione che la super-classe abbia un no-arg ctor, altrimenti è necessario chiamarlo esplicitamente). –

+0

@AndyTurner Quindi non c'è bisogno di usare 'super()'. Ma per quanto riguarda il costruttore vuoto 'Domanda()'? –

+0

Si assicurerà che l'oggetto possa essere creato senza passare i parametri –

risposta

4

Un costruttore no-arg (ad esempio, Question()) può essere utile in diversi casi - se si utilizza una classe come bean e si desidera inizializzare i suoi membri in modo pigramente, serializzandolo su GWT, ecc. Senza alcun contesto fornito nell'esempio, questo è davvero ridondante.

La chiamata a super() è completamente ridondante e verrà eseguita implicitamente se non viene specificata [altra] chiamata a super.

1

Il costruttore vuoto non è necessario nella maggior parte dei casi, solo quando si utilizza la classe in un framework scadente come Hibernate o JPA, in cui è necessario il costruttore vuoto per il framework per creare la classe. Quindi il costruttore vuoto è per il framework e quello non vuoto di solito è per test o altri usi.

Nell'esempio precedente non vedo alcuna prova che si utilizzi tale framework, quindi questo costruttore vuoto non è necessario.

Per quanto riguarda lo super() NON è affatto necessario.

0

Ogni classe che non estende esplicitamente un'altra classe estende implicitamente java.lang.Object. Quindi super() chiama semplicemente il costruttore no-arg di Object.

La chiamata esplicita non è necessaria poiché il compilatore lo aggiungerebbe per te. È sufficiente aggiungere una chiamata super() in un costruttore quando si desidera richiamare un costruttore di superclasse con argomenti.

quindi, il risultato sarà lo stesso se si aggiunge il costruttore super() o meno.