Como vemos en el código, el constructor de la clase base inicializa los cuatro miembros dato. Llamamos al constructor creando un objeto de la clase Ventana
Ventana ventana=new Ventana(0, 0, 20, 30);
Desde el objeto ventana podemos llamar a las funciones miembro públicas
ventana.mostrar(); ventana.cambiarDimensiones(10, 10); ventana.mostrar();
La clase derivada
Incrementamos la funcionalidad de la clase Ventana definiendo una clase derivada denominada Ventana Titulo. Los objetos de dicha clase tendrán todas las
La clase derivada heredará los miembros dato de la clase base y las funciones miembro, y tendrá un miembro dato más, el título de la ventana. public class Ventana Titulo extends Ventana{
protected String titulo;
public Ventana Titulo(int x, int y, int w, int h, String nombre) {
super(x, y, w, h);
titulo=nombre;
}
extends es la palabra reservada que indica que la clase Ventana Titulo deriva, o es una subclase, de la clase Ventana. La primera sentencia del constructor de la clase derivada es una llamada al constructor de la clase base mediante la palabra reservada super. La llamada
super(x, y, w, h);
inicializa los cuatro miembros dato de la clase base Ventana: x, y, ancho, alto. A continuación, se inicializa los miembros dato de la clase derivada, y se realizan las tareas de inicialización que sean necesarias. Si no se llama explícitamente al constructor de la clase base Java lo realiza por nosotros, llamando al constructor por defecto si existe. La función miembro denominada desplazar cambia la posición de la ventana, añadiéndoles el desplazamiento.
public void desplazar(int dx, int dy){
x+=dx;
y+=dy;
}
Redefine la función miembro mostrar para mostrar una ventana con un título.
public void mostrar(){
super.mostrar();
System.out.println(“titulo : “+titulo);
}
En la clase derivada se define una función que tiene el mismo nombre y los mismos parámetros que la de la clase base. Se dice que redefinimos la función mostrar en la clase derivada. La función miembro mostrar de la clase derivada Ventana Titulo hace una llamada a la función mostrar de la clase base Ventana, mediante
super.mostrar();
De este modo aprovechamos el código ya escrito, y le añadimos el código que describe la nueva funcionalidad de la ventana por ejemplo, que muestre el título. Si nos olvidamos de poner la palabra reservada super llamando a la función mostrar, tendríamos una función recursiva. La función mostrar llamaría a mostrar indefinidamente.
public void mostrar(){ //¡ojo!, función recursiva
System.out.println(“titulo : “+titulo);
mostrar();
}
La definición de la clase derivada Ventana Titulo, será la siguiente. package ventana;
public class Ventana Titulo extends Ventana{
protected String titulo;
public Ventana Titulo(int x, int y, int w, int h, String nombre) {
super(x, y, w, h);
titulo=nombre;
}
public void mostrar(){
super.mostrar();
System.out.println(“titulo : “+titulo);
}
public void desplazar(int dx, int dy){
x+=dx;
y+=dy;
}
}
Objetos de la clase derivada Creamos un objeto ventana de la clase derivada Ventana Titulo
Ventana Titulo ventana=new Ventana Titulo(0, 0, 20, 30, “Principal”);
Mostramos la ventana con su título, llamando a la función mostrar, redefinida en la clase derivada
ventana.mostrar();
Desde el objeto ventana de la clase derivada llamamos a las funciones miembro definidas en dicha clase
ventana.desplazar(4, 3);
Desde el objeto ventana de la clase derivada podemos llamar a las funciones miembro definidas en la clase base.
ventana.cambiarDimensiones(10, −5);
Para mostrar la nueva ventana desplazada y cambiada de tamaño escribimos
ventana.mostrar();