Académique Documents
Professionnel Documents
Culture Documents
Polimorfismo
Polimorfismo
Figura
<<Abstract>>
Persona
<<Abstract>>
Figura2D Figura3D
<<Abstract> <<Abstract>
Flexibilidad y reutilización.
Facilidad para adaptarse a cambios.
Implementación de colecciones y métodos genéricos.
Se consigue con:
Métodos polimórficos
Interfaces
Clases Abstractas
Objetivos
Persona
• Esta restringido por la herencia
• El polimorfismo implica que una
variable implica un tipo estático y un
tipo dinámico
AlumnoPre
Polimorfismo de asignación
Asignación ordinaria
Persona p = new Persona();
Asignación polimórfica
Persona ap = new AlumnoPre();
Persona
//Asignación Polimórfica
Persona ap1=new AlumnoPre();
AlumnoPre
3.1 Polimorfismo de asignación
Persona
ap
ap: AlumnoPre
p
AlumnoPre
Casting automático
AlumnoPre ap=new AlumnoPre(); //Asignación ordinaria
Persona p=ap; //Asignación polimórfica
Casting Explícito
Persona p=new AlumnoPre();
AlumnoPre ap=(AlumnoPre) p;
3.1 Polimorfismo de asignación
Persona
AlumnoPre
Polimorfismo de Sobrecarga
Sobrecarga o funcional:
Dos o más funciones comparten el nombre y distintos
argumentos (en numero y tipos). En este caso el nombre
es polimórfico.
Distintas definiciones y tipos: genera distintos
comportamientos
La función correcta se determina en tiempo de compilación
según la signatura.
Sobrecarga. Varias implementaciones del mismo método
con distintos parámetros: cambio de interfaz, habitual en
constructores
Podemos apreciar el polimorfismo
Sobrecargando el constructor dotamos de flexibilidad a la
clase
Polimorfismo de Redefinición
Sobreescritura. La subclase
reescribe el método heredado o sea
cambia el comportamiento.
Polimorfismo de Redefinición
f es el método sobrescrito
A
A oa;
B ob = new B();
D od = new D(); B C
oa = ob;
oa.f(); //¿que método se activa?
D
oa = od;
oa.f(); //¿que método se activa?
Polimorfismo paramétrico o genericidad
Clase Object
Puede existir una clase “raíz” de la cual heredan las
demás, en Java es la clase Object
La clase Object incluye las características comunes a
todos los objetos
Una variable de tipo Object puede apuntar a cualquier
tipo del lenguaje, incluidos los tipos primitivos
(autoboxing)
Object oval = 7;
double odo = (Double)oval;
Polimorfismo paramétrico o genericidad
Igualdad de objetos
protected Object clone()
Copia de objetos
public String toString()
Representación textual de un objeto
public class getClass()
Clase a partir de la que ha sido instanciado un objeto.
public int hashCode()
Código hash utilizado en las colecciones.
Polimorfismo paramétrico o genericidad
Genericidad en Java
A partir de la versión 5 se incluye la definición de
clases genéricas como elemento del lenguaje:
List<T>
Las operaciones aplicables sobre una entidad
genérica (variable o atributo de tipo T) son las
operaciones disponible para cualquier tipo.
Cuando se instancia una clase genérica el conjunto
de posibles tipos que puede contener viene
determinado por la jerarquía de herencia
List<Deposito> //contendrá cualquier tipo de
depósito.
Polimorfismo paramétrico o genericidad
Clases Abstractas
Toda clase que contenga algún método abstracto
(heredado o no) es abstracta.
Una clase puede ser abstracta y no contener ningún
método abstracto.
Especifica una funcionalidad que es común a un
conjunto de subclases aunque no es completa.
Puede ser total o parcialmente abstracta.
No es posible crear instancias de una clase
abstracta, pero si declarar entidades de estas clases.
Aunque la clase puede incluir la definición del constructor.
Las clases abstractas sólo tienen sentido en un
lenguaje con comprobación estática de tipos.
Polimorfismo paramétrico o genericidad
Interfaces en Java
Por defecto, toda la definición de una interfaz es
pública
Sólo contiene definiciones de métodos y constantes
Colecciones en Java
Las colecciones en Java son un ejemplo destacado de
iterables
Evita tener que manejar explícitamente el objeto
iterador.
La implementación de un iterador requiere crear
una clase responsable de llevar el estado de la
iteración
Polimorfismo paramétrico o genericidad