Está en la página 1de 37

INACAP

Universidad Tecnolgica de Chile


Sede Santiago Centro

Taller de Programacin I

Curso Java J2SE

Tema 10:
Herencia en Java

Ing. Manuel Lpez Ramos


(versin 1)
Parte I

Qu es la herencia entre clases?


Herencia entre clases

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

La herencia se conoce con el nombre de relacin de generalizacin.

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.

Clase padre Clase hija


o o
superclase subclase
Herencia entre clases

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

La relacin de generalizacin puede leerse utilizando la palabra "es".

Las relaciones del ejemplo entonces podran leerse como:

"Un Mineral es un Objeto"


"Un Animal es un Objeto"
"Un Ave es un Animal"
"Un SerHumano es un Animal", etc.
Herencia entre clases

Las relaciones entre clases pueden efectuarse en Java, utilizando la palabra clave extends.

public class Animal


{
public char sexo;
...
...
public Animal() { }
...
}

public class Tiburon extends Animal


{
private int numAletas;
...
...
public Tiburon() { }
...
}

La palabra clave extends puede leerse como "es". La relacin entonces podra leerse como "Un
tiburn es un Animal".
Herencia entre clases

Ejercicio: desarrollar el diagrama de clases siguiente:


Parte II

Acceso a atributos en herencia


Acceso a atributos

En la herencia en Java, el acceso a atributos sigue reglas especficas:

La clase hija puede acceder y usar cualquier atributo pblico de la clase padre.

La clase hija no puede acceder ni usar atributos privados 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 class SerVivo


{
protected byte edad;
private String nombre;

public SerVivo() { }
...
}
Acceso a atributos

En el diagrama de clases de UML, el acceso protegido se simboliza con un smbolo de gato (#).

public class SerVivo public class Mamifero extends SerVivo


{ {
protected byte edad; protected short numPatas;
private String nombre; protected boolean usaPelaje;
private String especie;
public SerVivo() { }
... public Mamifero() { }
} ...
}
Acceso a atributos

Ejercicio: implementar el diagrama de UML mostrado en la diapositiva anterior.

public class SerVivo public class Mamifero extends SerVivo


{ {
protected byte edad; protected short numPatas;
private String nombre; protected boolean usaPelaje;
private String especie;
public SerVivo() { }
... public Mamifero() { }
} ...
}
Parte III

Conceptos adicionales
Conceptos adicionales

La generalizacin entre clases presenta una serie de conceptos adicionales:

a) sobrecarga de mtodos (method overloading)

b) sobreescritura de mtodos (overriding)

c) mtodos y clases abstractas (abstract methods/classes)

d) polimorfismo (polymorphism)

e) interfaces (interfaces)

f) implementacin de interfaces sobre clases (interface implementation)

g) uso directo de mtodos de la clase padre (mediante el uso de super)


Sobrecarga de mtodos

La sobrecarga (overloading) consiste en utilizar varias veces el mismo nombre para diferentes mtodos
de una misma clase.

No se aplica en herencia, sino que slo dentro 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

La sobreescritura (overriding) consiste en la reimplementacin de un mtodo de la clase padre en


alguna de las clases hijas.

"Reimplementar" significa que el mtodo conserva su nombre, parmetros de entrada y tipo de retorno,
pero que su cdigo interno ser diferente.

Debe ser aplicado en herencia y en implementacin de interfaces.


Sobreescritura de mtodos

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:

public abstract class <nombreClase>


{
<mtodos_abstractos>
}
Mtodos y clases abstractas

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

Ejercicio: implementar la jerarqua de clases mostrada en el diagrama de UML. Aplique polimorfismo


sobre el cdigo de clculo de sueldos solicitado.
Interfaces

Una interfaz es una clase especial que slo posee mtodos abstractos.

Es un caso especial de clase abstracta, que tampoco puede ser instanciada.

Para definir una interfaz, se utiliza el siguiente modelo:

public interface <nombreInterfaz>


{
<mtodo_abstracto1>();
<mtodo_abstracto2>();
...
...
}
Aplicacin de interfaces a clases de Java

Una interfaz se aplica a otra clase, mediante la palabra clave implements, como se muestra a
continuacin:

public class A implements <nombreInterfaz>


{
...
...
}

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.

public class A implements <interfaz1>, <interfaz2>, ...


{
...
...
}
Polimorfismo

Ejercicio: implementar la jerarqua de clases mostrada en el diagrama de UML. Aplique implementacin


de interfaces.
Parte IV

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 3: implementar la jerarqua de clases mostrada en el diagrama de UML.


Ejercicios adicionales

Ejercicio 4: implementar la jerarqua de clases mostrada en el diagrama de UML.


Ejercicios adicionales

Ejercicio 5: implementar la jerarqua de clases mostrada en el diagrama de UML.


Ejercicios adicionales

Ejercicio 6: implementar la jerarqua de clases mostrada en el diagrama de UML.


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.

También podría gustarte