2012-04-22 23 views
9

¿Es obligatorio llamar al constructor de la clase base en Java? En C++ era opcional, así que le pregunto esto.¿Qué son los constructores implícitos en Java

Cuando extiendo ArrayAdapter, me sale este error: "Implicit super constructor ArrayAdapter<String>() is undefined. Must explicitly invoke another constructor"

Así que, ¿cuál es el propósito de llamar al constructor de base? Cuando creo el constructor de la clase base de objetos llamará al &, luego se trata del derecho derivado.

+0

Puede que no tenga un constructor rrayAdapter (). Si agrega un constructor predeterminado en la clase base, debería estar bien. –

+0

Relacionado: [Error de Java: el superconstructor implícito no está definido para el constructor predeterminado] (http://stackoverflow.com/questions/1197634/java-error-implicit-super-constructor-is-undefined-for-default-constructor). – Lion

+0

Entonces, ¿es algo así como DerivedClass (int x, int y): BaseClass (y), en C++ ???. ¿¿derecho?? También una duda más, en el mecanismo anterior, clase de constructor clase base dos o una vez? – Naruto

Respuesta

10

El constructor no-args se invoca implícitamente si no llama a uno usted mismo, que no es válido si ese constructor no existe. La razón por la que se requiere llamar a un superconstructor es que la superclase generalmente tiene algún estado en el que espera estar después de haberse construido, lo que puede incluir variables privadas que no se pueden establecer en una subclase. Si no llama al constructor, dejará el objeto probablemente en un estado no válido, lo que puede causar todo tipo de problemas.

+0

Entonces, ¿es algo así como DerivedClass (int x, int y): BaseClass (y), en C++ ???. ¿¿derecho?? También una duda más, en el mecanismo anterior, clase de constructor de clase base dos o una vez? – Naruto

+0

Sí, eso es correcto. Java solo le permite llamar a un constructor en un constructor, ya sea una clase base o reenviar a otro constructor en la clase actual, por lo que el constructor de la clase base solo puede invocarse una vez. – ricochet1k

0

No es necesario llamar al constructor no-args de superclase. Si desea llamar a un constructor con argumentos, el usuario súper palabra clave como se muestra a continuación:

super(arg1, ...); 
+0

"No es necesario llamar al constructor no-args de la superclase", pero ¿insertará Java una llamada de todos modos? –

Cuestiones relacionadas