Cuando se crea un objeto de una clase derivada se crea implícitamente un objeto de la clase base que se inicializa con su constructor correspondiente.
Si en la creación del objeto se usa el constructor no-args, entonces se produce una llamada implícita al constructor no-args para la clase base.Pero si se usan otros constructores es necesario invocarlos explícitamente.En nuestro ejemplo dado que la clase método define un constructor, encestáremos también un constructor para la clase Ejecutivo, que podemos completar así:
class Ejecutivo extends Empleado {
int presupuesto;
Ejecutivo (String n, int s) {
super(n,s);
}
void asignarPresupuesto(int p) {
presupuesto = p;
}
public String toString() {
String s = super.toString();
s = s + " Presupuesto: " + presupuesto;
return s;
}
}
Obsérvese que el constructor de Ejecutivo invoca directamente al constructor de Empleado mediante super(argumentos).En caso de resultar necesariamente la invocación al constructor de la superclase debe ser la primera sentencia del constructor de la subclase.
La clase derivada heredará los miembros dato de la clase base y las funciones miembro,y tendrá un miembro dato más,eltitulo de la ventana de la ventana.
public class VentanaTitulo extends Ventan{
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 derivada,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 continuacion, se inicializa los miembros dato de la clase derivada, y se realizan las tareas de inicializacion 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 funcion miembro denominada desplazar cambia la posicion de la ventana,añadiendoles el desplazamiento.
public void desplazar(int dx, int dy){
x+=dx;
y+=dy;
{
.
Redefine la función miembro para mostrar una ventana con un titulo.
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 ala 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 titulo.
Si nos olvidamos de poner la palabra reservada super llamando a la 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 función de la clase derivada Ventana Titulo,sera 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= new Ventana Titulo(0,0,20,30,"principal");
Mostramos la ventana con su titulo,llamando ala funcion mostrar,redefinida en la clase derivada
ventana.mostrar();
Desde el objeto ventana de la clase derivada llamamos alas funciones miembro definidas en dicha clase.
ventana.desplazar(4, 3);
Desde el objeto ventana de la clase derivada podemos llamar alas funciones miembros definidas en la clase base.
ventana.cambiarDimensiones(10, −5);
Para mostrar la nueva ventana desplazada y cambiada tamaño escribimos
ventana.mostrar();
NOTA:es un nuevo tipo de objeto definido por el usuario que tiene la propiedad de heredar atributos y métodos de otra clase definida previamente,denominada superclase.
SINTAXIS
class
{
//cuerpo de la clase
}
// BIBLIOGRAFIA
apuntes.rincondelvago.com/clases-derivadas.html
www.sc.ehu.es/sbweb/fisica/.../herencia.html
No hay comentarios:
Publicar un comentario