Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Otro PDF
Otro PDF
Taller de Programación I
Tema 10:
Herencia en Java
●La herencia entre clases consiste en una relación especial que conecta dos o más conceptos muy
parecidos o similares entre sí, dentro de un problema.
● Permite que una clase tome todos los atributos y métodos de otra automáticamente.
● Con esto, la herencia evita tener que redefinir atributos y métodos similares en varias clases parecidas.
Herencia entre clases
● Se indica en el diagrama de clases de UML utilizando una línea más 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 relación de generalización, puede clasificarse según la cantidad de clases padres que
posee cierta clase, en los siguientes grupos:
a) herencia simple: aquella donde una clase hija sólo tiene una clase padre directa.
b) herencia múltiple: aquella donde una clase hija puede tener dos ó más clases padres.
Herencia entre clases
●Debido a la relación de generalización, una clase base entregará automáticamente todos sus atributos y
métodos a sus clases hijas, como se puede observar en el siguiente diagrama de clases de UML.
●En este caso, la clase Tiburón recibirá todos los atributos y métodos (públicos y privados) de la clase
base y agregará 3 atributos nuevos y 2 métodos 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 relación entonces podría leerse como "Un
tiburón es un Animal".
Herencia entre clases
● La clase hija puede acceder y usar cualquier atributo público 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 símbolo de gato (#).
Acceso a atributos
● En el diagrama de clases de UML, el acceso protegido se simboliza con un símbolo de gato (#).
Acceso a atributos
● En el diagrama de clases de UML, el acceso protegido se simboliza con un símbolo de gato (#).
public SerVivo() { }
...
}
Acceso a atributos
● En el diagrama de clases de UML, el acceso protegido se simboliza con un símbolo 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 métodos
de una misma clase.
●Los métodos sobrecargados (overloaded methods) deben tener el mismo nombre, pero diferente
cantidad y/o tipos de parámetros de entrada.
Sobrecarga de métodos
● Ejercicio: implementar la clase de Java con sus métodos sobrecargados. Luego, pruebe los métodos
llamándolos e imprimiendo los resultados.
Sobreescritura de métodos
●"Reimplementar" significa que el método conserva su nombre, parámetros de entrada y tipo de retorno,
pero que su código interno será diferente.
●Ejercicio: implementar la jerarquía de clases mostrada en el diagrama de UML. Nótese que el método
comer(), de la clase Animal, se reimplementa (sobreescribe) en las clases hijas Gato y Jirafa.
Métodos y clases abstractas
●Los métodos abstractos (abstract) son aquellos métodos que sólo declaran su nombre, tipo de retorno y
parámetros, pero que no presentan un bloque definido de código a ejecutar.
●Se utilizan para definir métodos que deberán implementarse obligatoriamente dentro de las clases hijas
en una jerarquía de herencia, pero donde el diseñador no sabe a ciencia cierta cuál debería ser el código
correcto para dicho método.
● Al extender una clase con métodos abstractos, éstos deberán definirse completamente dentro de las
clases hijas.
Métodos y clases abstractas
● Por extensión, una clase abstracta es aquella que posee uno o varios métodos abstractos.
● Debido a que una clase abstracta no tiene definidos todos sus métodos, 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 métodos. Esta última
clase sí se podrá utilizar para crear objetos para el programa.
● Se define como:
●Ejercicio: implementar la jerarquía de clases mostrada en el diagrama de UML. Nótese que el método
comer(), de la clase Animal, está declarado como abstract, al igual que la clase Animal.
Polimorfismo
● El polimorfismo es uno de los mecanismos más potentes que ofrece un lenguaje orientado a objetos.
● Consiste en que un método sobreescrito varias veces en las clases hijas aplica automáticamente 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 código reducido sobre una gran cantidad de objetos almacenados
como objetos genéricos.
Polimorfismo
● Una interfaz es una clase especial que sólo posee métodos abstractos.
● Una interfaz se aplica a otra clase, mediante la palabra clave implements, como se muestra a
continuación:
●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 múltiple.
Ejercicios adicionales
Ejercicios adicionales
● Ejercicio 1: implementar la jerarquía de clases mostrada en el diagrama de UML. Aplique los conceptos
vistos en la clase.
Ejercicios adicionales
● Ejercicio 2: implementar la jerarquía de clases mostrada en el diagrama de UML. Aplique los conceptos
vistos en la clase.
Ejercicios adicionales
●Ejercicio 7: implementar la jerarquía de clases mostrada en el diagrama de UML. Nótese que aquí se
solicita crear una interfaz gráfica de ventanas basada en Java Swing.