2012-04-22 15 views
9

È obbligatorio chiamare il costruttore della classe base in Java? In C++ era opzionale, quindi lo sto chiedendo.Che cosa sono i costruttori impliciti su Java

Quando mi estendo ArrayAdapter, ottengo questo errore: "Implicit super constructor ArrayAdapter<String>() is undefined. Must explicitly invoke another constructor"

Quindi, qual è lo scopo di chiamare costruttore di base? Quando creo il costruttore della classe base dell'oggetto chiameremo & quindi viene derivato il diritto.

+0

Non si può avere un costruttore rrayAdapter (). Se aggiungi un costruttore predefinito nella classe base, dovrebbe andare bene. –

+0

Correlato: [Errore Java: Il super costruttore implicito non è definito per il costruttore predefinito] (http://stackoverflow.com/questions/1197634/java-error-implicit-super-constructor-is-undefined-for-default-constructor). – Lion

+0

Quindi, è qualcosa come DerivedClass (int x, int y): BaseClass (y), in C++ ???. destra?? Inoltre un altro dubbio, nel meccanismo sopra, classe di costruttore della classe base due volte o una volta? – Naruto

risposta

10

Il costruttore no-args viene chiamato implicitamente se non lo si chiama, che non è valido se tale funzione di costruzione non esiste. Il motivo per cui è necessario chiamare un super costruttore è che la superclasse di solito ha uno stato in cui si aspetta di essere inserito dopo la costruzione, che può includere variabili private che non possono essere impostate in una sottoclasse. Se non si chiama il costruttore, lascerebbe l'oggetto in uno stato probabilmente non valido, che può causare tutti i tipi di problemi.

+0

Quindi, è qualcosa come DerivedClass (int x, int y): BaseClass (y), in C++ ???. destra?? Ancora un dubbio, nel meccanismo sopra riportato, classe di costruttore della classe base due volte o una volta? – Naruto

+0

Sì, è vero. Java consente solo di chiamare un costruttore in un costruttore, una classe base o l'inoltro a un altro costruttore nella classe corrente, quindi il costruttore della classe base può essere chiamato solo una volta. – ricochet1k

0

Non è necessario chiamare il costruttore no-args di super classe. Se si desidera chiamare un costruttore con args, utente super- parole chiave come mostrato di seguito:

super(arg1, ...); 
+0

"Non è necessario chiamare il costruttore no-args della super classe", ma Java inserirà comunque una chiamata? –