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