3. Polimorfismo Poly morphos Múltiples formas
(Definición)
•mismo nombre,
métodos diferente
implementación
•actúen de
modo diferente
objetos en respuesta a
una misma
llamada.
•Reutilizable
Código •Fácil de
adaptarlo
4. El polimorfismo va ligado a la herencia: objetos
jerárquicamente relacionados responden en forma
diferente al mismo mensaje
5. Polimorfismo VS
Sobrecarga
Sobrecarga Polimorfismo
se da siempre en una se da entre clases
sola clase distintas.
se resuelve en tiempo
se resuelve en tiempo de ejecución
de enlazado (cuando (dependiendo de la
se esta construyendo clase a la que
el ejecutable) pertenece el objeto
que hace el llamado)
6. Método Abstracto
Método Abstracto
es un método
declarado en
una clase para No tendrá
se declaran
el cual esa clase cuerpo y
Sin código pero no se
no proporciona terminará en
definen.
la punto y coma
implementación
(el código).
7. Clase abstracta
Tiene al
menos un
Una clase que método
extiende a una abstracto Declara la
clase abstracta existencia de
debe implementar métodos pero
los métodos no la
abstractos o implementació
volverlos a declarar n
como abstractos
Puede
contener
tiene que métodos no-
derivarse Clase abstractos
obligatoriamen Abstracta pero al menos
te uno de los
métodos debe
serlo
no pueden
tener métodos
no se puede
privados (no
instanciar pero
se podrían
si se puede
implementar) Cuando una heredar
ni tampoco clase contiene
estáticos. un método
abstracto tiene
que declararse
abstracta
8.
9. Implementación
public abstract class figura {
public abstract class figura2D extends figura {
protected String nombre;
protected int color; public abstract int calcularArea();
protected int grosorBorde;
public String getNombre(){ public abstract int calcularPerimetro();
return this.nombre; }
}
public void setNombre(String n){
this.nombre=n;
}
public int getColor(){
return this.color;
} public abstract class figura3D extends figura {
public void setColor(int c){
this.color=c; public abstract int calcularVolumen();
} }
public int getGrosorBorde(){
return this.grosorBorde;
}
public void setGrosorBorde(int g){
this.grosorBorde=g;
}
public abstract void dibujar();
}
10. Interface
una interface es una clase abstracta pura, es decir una clase donde todos los
métodos son abstractos
Interface
Si la interface va a tener atributos, éstos deben llevar las palabras reservadas static
final y con un valor inicial ya que funcionan como constantes.
La interface puede definirse public o sin modificador de acceso
Todos los métodos que declara una interface son siempre public
Una clase implementa una o más interfaces (separadas con comas ",") con la palabra
reservada implements.
11. Ejemplo Interface
interface nombre_interface {
tipo_retorno nombre_metodo ( lista_argumentos ) ;
...
}
Por ejemplo:
interface InstrumentoMusical {
void tocar();
void afinar();
String tipoInstrumento();
}
sirven de guía para definir un determinado concepto (clase) y lo que
debe hacer, pero sin desarrollar un mecanismo de solución
12. Implementación de una interface
/** /**
* Declaracion de la interfaz Modificacion * Declaracion de la clase Acumulador
* @author A. Garcia-Beltran * @author A. Garcia-Beltran
* Ultima revision: noviembre, 2007 * Ultima revision: noviembre, 2007
*/ */
public interface Modificacion { public class Acumulador implements Modificacion {
void incremento(int a); private int valor;
} public Acumulador (int i) {
valor = i;
}
public int daValor () {
/** return valor;
* Demostracion de la clase Acumulador }
* @author A. Garcia-Beltran public void incremento (int a) {
* Ultima revision: noviembre, 2007 valor += a;
*/ }
public class PruebaAcumulador { }
public static void main (String [] args) {
Acumulador p = new Acumulador(25);
p.incremento(12);
System.out.println(p.daValor());
}
}
13. Formas de
Polimorfismo
Sobre-escritura de métodos:
Métodos de una subclase sobre escriben los
métodos de una superclase
Sobre-escritura de métodos abstractos
Métodos de una subclase implementan los
métodos abstractos de una superclase abstracta
Sobre-escritura de métodos a través de
interface:
Métodos de una clase concreta implementan los
métodos de la interface
14. Sobre-escritura de métodos
Subclase modifica los métodos que ha heredado de su padre
Nuevo método tiene diferente funcionalidad del método del
padre pero con el MISMO
Nombre
Tipo de Retorno
Lista de argumentos (OJO: lo diferencia de la Sobrecarga)
public class empleado {
String nombre;
int salario;
public String getDetalle(){ public class Jefe extends empleado {
return «Nombre: «+nombre+»nSalario: «+salario;
} String depto;
}
public String getDetalle(){
return «Nombre: «+nombre+»nDepartamento: «+depto;
}
}
15. Llamada de métodos virtuales
Referencia Referencia
estática dinámica
(En tiempo de (En tiempo de
compilación) ejecución)
Empleado e=new Jefe;
e.getDetalle();
¿Cual de los getDetalle() se ejecutará?
¿El de la clase empleado o el de la clase
Jefe?