4.
Constructores y herencia
En una jerarquía, es posible que tanto las superclases como las subclases tengan
sus propios constructores. Esto plantea una pregunta importante: ¿qué constructor
es responsable de construir un objeto de la subclase, el de la superclase, el de la
subclase o ambos? La respuesta es esta: el constructor para la superclase construye
la porción de la superclase del objeto, y el constructor para la subclase construye
la parte de la subclase.
Esto tiene sentido porque la superclase no tiene conocimiento ni acceso a ningún
elemento en una subclase. Por lo tanto, su construcción debe estar separada. En la
práctica, la mayoría de las clases tendrán constructores explícitos (no
predeterminados). Aquí verá cómo manejar esta situación.
Cuando solo la subclase define un constructor, el proceso es sencillo: simplemente
construye el objeto de la subclase. La porción de superclase del objeto se
construye automáticamente utilizando su constructor predeterminado. Por ejemplo,
aquí hay un programa para Triangulo que define un constructor. También hace que el
estilo sea privado, ya que ahora lo establece el constructor.
//Clase para objetos de dos dimensiones
//[Link]
class DosDimensiones{
private double base;
private double altura;
//Métodos de acceso para base y altura
double getBase(){return base;}
double getAltura(){return altura;}
void setBase(double b){base=b;}
void setAltura (double h){altura=h;}
void mostrarDimension(){
[Link]("La base y altura es: "+base+" y "+altura);
}
}
//Una subclase de DosDimensiones para Triangulo
//[Link]
class Triangulo extends DosDimensiones{
private String estilo;
//Constructor
Triangulo(String s, double b, double h){
setBase(b);
setAltura(h);
estilo=s;
}
double area(){
return getBase()*getAltura()/2;
}
void mostrarEstilo(){
[Link]("Triangulo es: "+estilo);
}
}
class Lados3{
public static void main(String[] args) {
Triangulo t1=new Triangulo("Estilo 1",4.0,4.0);
Triangulo t2=new Triangulo("Estilo 2",8.0,12.0);
[Link]("Información para T1: ");
[Link]();
[Link]();
[Link]("Su área es: "+[Link]());
[Link]();
[Link]("Información para T2: ");
[Link]();
[Link]();
[Link]("Su área es: "+[Link]());
}
}
Salida:
Información para T1:
Triangulo es: Estilo 1
La base y altura es: 4.0 y 4.0
Su área es: 8.0
Información para T2:
Triangulo es: Estilo 2
La base y altura es: 8.0 y 12.0
Su área es: 48.0
Aquí, el constructor de Triangulo inicializa los miembros de DosDimensiones que
hereda, junto con su propio campo de estilo.
Cuando tanto la superclase como la subclase definen constructores, el proceso es un
poco más complicado porque deben ejecutarse tanto la superclase como los
constructores de subclase. En este caso, debe usar otra de las palabras clave de
Java, super, que tiene dos formas generales.
Lectura Recomendada