martes, 19 de abril de 2011

Herencia en Java

En la última clase estudiamos el tema de la herencia en Java.  El objetivo de la herencia es permitir la creación de nuevas clases basadas en clases existentes.  Cuando heredamos de una clase existente reusamos o heredamos de esa clase los métodos y atributos, además podemos definir nuevos métodos y atributos propios de la clase nueva.
La clase ya existente es llamada superclase o clase padre.  La clase nueva que creamos a partir de la clase padre se llama subclase o clase hija.
Por ejemplo podemos pensar en una clase Empleado y definirla como
class Empleado {
String nombre;
int numEmpleado , sueldo; 

static private int contador = 0; 

Empleado(String nombre, int sueldo) {
this.nombre = nombre;
this.sueldo = sueldo;
numEmpleado = ++contador;
} 

public void aumentarSueldo(int porcentaje) {
sueldo += (int)(sueldo * aumento / 100);
} 

public String toString() {
return "Num. empleado " + numEmpleado + " Nombre: " + nombre +
" Sueldo: " + sueldo;
}
}


En el ejemplo el Empleado se caracteriza por un nombre (String) y por un número de empleado y sueldo (enteros). La clase define un constructor que asigna los valores de nombre y sueldo y calcula el número de empleado a partir de un contador (variable estática que siempre irá aumentando), y dos métodos, uno para calcular el nuevo sueldo cuando se produce un aumento de sueldo (método aumentarSueldo)  y un segundo que devuelve una representación de los datos del empleado en un String.(método toString).


Con esta representación podemos pensar en otra clase que reuna todas las características de Empleado y añada alguna propia. Por ejemplo, la clase Ejecutivo. A los objetos de esta clase se les podría aplicar todos los datos y métodos de la clase Empleado y añadir algunos, como por ejemplo el hecho de que un Ejecutivo tiene un presupuesto.


Así diríamos que la clase Ejecutivo extiende o hereda la clase Empleado. Esto en Java se hace con la clausula extends que se incorpora en la definición de la clase, de la siguiente forma:


class Ejecutivo extends Empleado {
int presupuesto;
void asignarPresupuesto(int p) {
presupuesto = p;
}
}


Con esta definición un Ejecutivo es un Empleado que además tiene algún rasgo distintivo propio. El cuerpo de la clase Ejecutivo incorpora sólo los miembros que son específicos de esta clase, pero implícitamente tiene todo lo que tiene la clase Empleado.


A Empleado se le llama clase base o superclase y a Ejecutivo clase derivada o subclase.


Los objetos de las clases derivadas se crean igual que los de la clase base y pueden acceder tanto sus datos y métodos como a los de la clase base. Por ejemplo:


Ejecutivo jefe = new Ejecutivo( "Armando Mucho", 1000);
jefe.asignarPresupuesto(1500);
jefe.aumentarSueldo(5);


Atención!: Un Ejecutivo ES un Empleado, pero lo contrario no es cierto. Si escribimos:


Empleado curri = new Empleado ( "Esteban Comex Plota" , 100) ;
curri.asignarPresupuesto(5000);  // error


se producirá un error de compilación pues en la clase Empleado no existe ningún método llamado asignarPresupuesto.

No hay comentarios:

Publicar un comentario