HERENCIA
Jerarquía de Clases, extends, super
La Herencia es una de las
características más importantes y beneficiosas para el enfoque de programación
orientado a objetos. En resumen se trata de “utilizar lo que ya está hecho”
para agregarle y/o cambiarle funcionalidad, nunca quitarle. Esto en la vida
real tiene mucho sentido. Por ejemplo, Existiendo el televisor en blanco y
negro (clase Padre) fabricaron el televisor a color (clase Hija) aprovechando
todo lo bueno del televisor en blanco y negro ya implementado como cambio de
canales, administración del volumen, mecanismo de encendido/apagado. Al
televisor a color le agregaron más funcionalidad como: soportar audio, video,
cable. Otro ejemplo: Existiendo el televisor a color (clase Padre) fabricaron
el televisor digital (clase Hija) al que le cambiaron y agregaron funcionalidad
para el soporte de la tecnología digital.
En programación sucede lo
mismo, por ejemplo: Existiendo una clase Fecha (clase Padre) cuya funcionalidad
soporta un formato de presentación DD/MM/AA , se puede construir una nueva clase
FechaM (clase Hija) cuya funcionalidad soporte más formatos de presentación
como DD/NOMBRE DEL MES/AAAA, AA/MM/DD, etc.
A la clase ya existente se
le conoce como clase Padre ó clase Base ó clase Ascendiente o Super clase. En
cambio a la nueva clase que hereda se le conoce como clase Hija ó clase
Derivada ó clase Descendiente o Subclase.
Cuando uno va a
desarrollar por primera vez una clase y piensa que con el tiempo se podría
utilizar como clase Padre, entonces el nivel de acceso a sus atributos deja de
ser prívate y se debe considerar como protected ya que sigue permitiendo el
encapsulamiento pero además dispone su acceso directo de todas sus clases
descendientes. En cambio, cuando la clase que se va a heredar ya existe con un
nivel de acceso prívate para sus atributos, entonces la clase hija tiene que
utilizar la funcionalidad pública de acceso a sus atributos.
La palabra reservada que
implementa la herencia es extends.
Si la clase Padre no tiene
un constructor explícito, entonces la clase Hija no está obligada a tenerlo.
Sin embargo, cuando la clase Padre sí tiene un constructor explícito, entonces
la clase Hija sí está obligada a tener su constructor desde donde debe invocar
al constructor de la clase Padre utilizando la palabra reservada super.
La clase Hija puede tener
métodos con el mismo nombre que algún método de la clase Padre. Para
diferenciar su invocación al método de la clase Padre se le antepone la palabra
reservada super.
Ejemplo 1
Considere la existencia de la clase TV desarrollada
anteriormente y diseñe una nueva clase hija de nombre TVH, aplicando
herencia, considerando los siguientes atributos protegidos adicionales:
origen(entero), tecnología(entero). Considere para el campo origen: nacional,
americano, japonés, koreano, chino, otro. Considere para el campo tecnología:
Tradicional, LCD, Plasma, Digital. Considere métodos adicionales para que
retornen el nombre del origen y el nombre de la tecnología.
La nueva clase hija debe ser utilizada para el proceso
de la siguiente GUI:
public class TVH
extends TV {
// atributos protegidos
protected
int origen, tecnologia;
// constructor
public
TVH(String serie, int marca, int tamaño, double precio, int origen, int tecnologia){
//
invocación al constructor de la clase Padre
super(serie,
marca, tamaño, precio);
//
inicializa sus propios atributos
this.origen
= origen;
this.tecnologia=tecnologia;
}
// métodos
get-set
public int
getOrigen() {
return origen; }
public void setOrigen(int origen) {
this.origen = origen; }
public int getTecnologia() {
return tecnologia; }
public void setTecnologia(int
tecnologia) {
this.tecnologia
= tecnologia; }
//
metodos adicionales
public
String nombreOrigen(){
switch(origen){
case 1: return
"Nacional";
case 2: return
"Americano";
case 3: return "Japonés";
case 4: return
"Koreano";
case 5: return
"Chino";
default: return
"Otro"; } }
public String nombreTecnologia(){
switch(tecnologia){
case 1: return
"Tradicional";
case 2: return
"LCD";
case 3: return
"Plasma";
default: return "Digital"; }
}
}
// fin de la clase hija
La nueva clase hija tendrá acceso a todo lo public y protected
de la clase padre. Sin embargo, no tendrá acceso a ningún elemento private.
La nueva clase hija tiene sus atributos con nivel de acceso protected porque
estamos previniendo que ésta sea heredada por otras clases.
Observe y analice la aplicación de Herencia: extends, super
Programamos la acción del botón Nuevo
private void btnNuevoActionPerformed(java.awt.event.ActionEvent
evt) {
TVH nuevo = new
TVH(leeSerie(),leeMarca(),leeTamaño(),leePrecio(), leeOrigen(),
leeTecnologia()); lista(nuevo);
}
private void lista(TVH t){
imprime("Datos de
la clase Padre-------------");
imprime("Nro.
Serie\t:"+t.getSerie());
imprime("Marca\t:"+t.nombreMarca());
imprime("Tamaño\t:"+t.getTamaño());
imprime("Precio
us$\t:"+t.getPrecio());
imprime("Precio
S/.\t:"+t.precioSoles(2.85));
imprime("Datos de
la clase Hija--------------");
imprime("Origen\t:"+t.nombreOrigen());
imprime("Tecnologia\t:"+t.nombreTecnologia());
imprime("----------------------------------");
}
Observe e identifique los datos que se utilizan al
momento de crear el objeto. Observe y verifique la compatibilidad entre la
invocación del método lista() y su desarrollo. Repase el desarrollo de los
métodos de lectura de los datos de la GUI y también el método imprime().




0 comentarios:
Publicar un comentario