404

Capítulo 9 Programación orientada a objetos: herencia

9.5 Los constructores en las subclases

Como explicamos en la sección anterior, al crear una instancia de un objeto de una subclase se empieza una cade-
na de llamadas a los constructores, en los que el constructor de la subclase, antes de realizar sus propias tareas, 
invoca al constructor de su superclase, ya sea en forma explícita (por medio de la referencia 

super

) o implícita 

(llamando al constructor predeterminado o sin argumentos de la superclase). De manera similar, si la superclase 
se deriva de otra clase (como sucede con cualquier clase, excepto 

Object

), el constructor de la superclase invoca al 

constructor de la siguiente clase que se encuentre a un nivel más arriba en la jerarquía, y así en lo sucesivo. El últi-
mo constructor que se llama en la cadena es siempre el de la clase 

Object

. El cuerpo del constructor de la subclase 

original termina de ejecutarse al último. El constructor de cada superclase manipula las variables de instancia de 
la superclase que hereda el objeto de la subclase. Por ejemplo, considere de nuevo la jerarquía 

EmpleadoPorCo-

mision3—EmpleadoBaseMasComision4

 de las fi guras 9.12 y 9.13. Cuando un programa crea un objeto 

Emplea-

doBaseMasComision4

, se hace una llamada al constructor de 

EmpleadoBaseMasComision4

. Ese constructor 

llama al constructor de la clase 

EmpleadoPorComision3

, que a su vez llama en forma implícita al constructor de 

Object

. El constructor de la clase 

Object

 tiene un cuerpo vacío, por lo que devuelve de inmediato el control al 

constructor de 

EmpleadoPorComision3

, el cual inicializa las variables de instancia 

private

 de 

EmpleadoPorCo-

mision3

 que son parte del objeto 

EmpleadoBaseMasComision4

. Cuando este constructor termina de ejecutarse, 

devuelve el control al constructor de 

EmpleadoBaseMasComision4

, el cual inicializa el 

salarioBase

 del objeto 

EmpleadoBaseMasComision4

.

Observación de ingeniería de software 9.8

Cuando un programa crea un objeto de una subclase, el constructor de la subclase llama de inmediato al constructor 
de la superclase (ya sea en forma explícita, mediante 

super

, o implícita). El cuerpo del constructor de la superclase se 

ejecuta para inicializar las variables de instancia de la superclase que forman parte del objeto de la subclase, después 
se ejecuta el cuerpo del constructor de la subclase para inicializar las variables de instancia que son parte sólo de la 
subclase. Java asegura que, aún si un constructor no asigna un valor a una variable de instancia, la variable de todas 
formas se inicializa con su valor predeterminado (es decir, 

0

 para los tipos numéricos primitivos, 

false

 para los tipos 

boolean

 y 

null

 para las referencias).

En nuestro siguiente ejemplo volvemos a utilizar la jerarquía de empleado por comisión, al declarar las clases 

EmpleadoPorComision4

 (fi gura 9.15) y 

EmpladoBaseMasComision5

 (fi gura 9.16). El constructor de cada clase 

imprime un mensaje cuando se le invoca, lo cual nos permite observar el orden en el que se ejecutan los cons-
tructores en la jerarquía.

Figura 9.14

  |  Las variables de instancia 

private

 de la superclase son accesibles para una subclase, a través de los 

métodos

public

 o 

protected

 que hereda la subclase. (Parte 2 de 2).

 34  

}

// fin de main

 35 

}

// fin de la clase PruebaEmpleadoBaseMasComision4

Informacion del empleado obtenida por los metodos establecer:

El primer nombre es Bob
El apellido es Lewis
El numero de seguro social es 333-33-3333
Las ventas brutas son 5000.00
La tarifa de comision es 0.04
El salario base es 300.00

Informacion actualizada del empleado, obtenida por toString:

con sueldo base empleado por comision: Bob Lewis
numero de seguro social: 333-33-3333
ventas brutas: 5000.00
tarifa de comision: 0.04
sueldo base: 1000.00

09_MAQ_CAP_09.indd404

4/19/081:24:39AM