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

características de los objetos de la clase base, pero además tendrán un título, y se podran desplazar (se simula el desplazamiento de una ventana con el ratón).

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();