Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Taller de Programacin I
Tema 10:
Herencia en Java
La herencia entre clases consiste en una relacin especial que conecta dos o ms conceptos muy
parecidos o similares entre s, dentro de un problema.
Permite que una clase tome todos los atributos y mtodos de otra automticamente.
Con esto, la herencia evita tener que redefinir atributos y mtodos similares en varias clases parecidas.
Herencia entre clases
Se indica en el diagrama de clases de UML utilizando una lnea ms una punta de flecha blanca.
La clase que tiene la punta de flecha se conoce con el nombre de clase padre, superclase o clase
base.
La clase al lado opuesto de la flecha se conoce con el nombre de clase hija, subclase o clase
derivada.
La herencia, o relacin de generalizacin, puede clasificarse segn la cantidad de clases padres que
posee cierta clase, en los siguientes grupos:
a) herencia simple: aquella donde una clase hija slo tiene una clase padre directa.
b) herencia mltiple: aquella donde una clase hija puede tener dos ms clases padres.
Herencia entre clases
Debido a la relacin de generalizacin, una clase base entregar automticamente todos sus atributos y
mtodos a sus clases hijas, como se puede observar en el siguiente diagrama de clases de UML.
En este caso, la clase Tiburn recibir todos los atributos y mtodos (pblicos y privados) de la clase
base y agregar 3 atributos nuevos y 2 mtodos nuevos.
Herencia entre clases
Las relaciones entre clases pueden efectuarse en Java, utilizando la palabra clave extends.
La palabra clave extends puede leerse como "es". La relacin entonces podra leerse como "Un
tiburn es un Animal".
Herencia entre clases
La clase hija puede acceder y usar cualquier atributo pblico de la clase padre.
Las reglas anteriores causan un problema, ya que no se pueden crear atributos no visibles por el
programa que puedan ser usados por la clase hija -> problema del encapsulamiento en herencia.
Para crear atributos privados en la clase padre que s puedan ser utilizados por las clases hijas se
define un nuevo tipo de acceso a datos, denominado como acceso protegido (protected).
En el diagrama de clases de UML, el acceso protegido se simboliza con un smbolo de gato (#).
Acceso a atributos
En el diagrama de clases de UML, el acceso protegido se simboliza con un smbolo de gato (#).
Acceso a atributos
En el diagrama de clases de UML, el acceso protegido se simboliza con un smbolo de gato (#).
public SerVivo() { }
...
}
Acceso a atributos
En el diagrama de clases de UML, el acceso protegido se simboliza con un smbolo de gato (#).
Conceptos adicionales
Conceptos adicionales
d) polimorfismo (polymorphism)
e) interfaces (interfaces)
La sobrecarga (overloading) consiste en utilizar varias veces el mismo nombre para diferentes mtodos
de una misma clase.
Los mtodos sobrecargados (overloaded methods) deben tener el mismo nombre, pero diferente
cantidad y/o tipos de parmetros de entrada.
Sobrecarga de mtodos
Ejercicio: implementar la clase de Java con sus mtodos sobrecargados. Luego, pruebe los mtodos
llamndolos e imprimiendo los resultados.
Sobreescritura de mtodos
"Reimplementar" significa que el mtodo conserva su nombre, parmetros de entrada y tipo de retorno,
pero que su cdigo interno ser diferente.
Ejercicio: implementar la jerarqua de clases mostrada en el diagrama de UML. Ntese que el mtodo
comer(), de la clase Animal, se reimplementa (sobreescribe) en las clases hijas Gato y Jirafa.
Mtodos y clases abstractas
Los mtodos abstractos (abstract) son aquellos mtodos que slo declaran su nombre, tipo de retorno y
parmetros, pero que no presentan un bloque definido de cdigo a ejecutar.
Se utilizan para definir mtodos que debern implementarse obligatoriamente dentro de las clases hijas
en una jerarqua de herencia, pero donde el diseador no sabe a ciencia cierta cul debera ser el cdigo
correcto para dicho mtodo.
Al extender una clase con mtodos abstractos, stos debern definirse completamente dentro de las
clases hijas.
Mtodos y clases abstractas
Por extensin, una clase abstracta es aquella que posee uno o varios mtodos abstractos.
Debido a que una clase abstracta no tiene definidos todos sus mtodos, no se puede instanciar una
clase abstracta directamente. Si se quiere instanciar una clase abstracta, se deber crear una nueva
clase que herede las propiedades de la clase abstracta y que implemente todos sus mtodos. Esta ltima
clase s se podr utilizar para crear objetos para el programa.
Se define como:
Ejercicio: implementar la jerarqua de clases mostrada en el diagrama de UML. Ntese que el mtodo
comer(), de la clase Animal, est declarado como abstract, al igual que la clase Animal.
Polimorfismo
El polimorfismo es uno de los mecanismos ms potentes que ofrece un lenguaje orientado a objetos.
Consiste en que un mtodo sobreescrito varias veces en las clases hijas aplica automticamente la
rutina correcta sobre un objeto proveniente de una de las clases hijas, cuando ste objeto se almacena
bajo la identidad de una variable de la clase padre.
Permite implementar rutinas con cdigo reducido sobre una gran cantidad de objetos almacenados
como objetos genricos.
Polimorfismo
Una interfaz es una clase especial que slo posee mtodos abstractos.
Una interfaz se aplica a otra clase, mediante la palabra clave implements, como se muestra a
continuacin:
A una clase de Java se le pueden aplicar una o varias interfaces, separadas por coma. Con esto se
puede aplicar una forma de herencia mltiple.
Ejercicios adicionales
Ejercicios adicionales
Ejercicio 1: implementar la jerarqua de clases mostrada en el diagrama de UML. Aplique los conceptos
vistos en la clase.
Ejercicios adicionales
Ejercicio 2: implementar la jerarqua de clases mostrada en el diagrama de UML. Aplique los conceptos
vistos en la clase.
Ejercicios adicionales
Ejercicio 7: implementar la jerarqua de clases mostrada en el diagrama de UML. Ntese que aqu se
solicita crear una interfaz grfica de ventanas basada en Java Swing.