Polimorfismo
-
Upload
kaddy-hernandez -
Category
Documents
-
view
800 -
download
2
Transcript of Polimorfismo
PolimorfismoLenguajes de
Programación II
Corporación Universitaria
del Caribe CECAR
Polimorfismo
(Definición)Poly morphos
métodos
•mismo nombre, diferente implementación
objetos
•actúen de modo diferente en respuesta a una misma llamada.
Código
•Reutilizable
•Fácil de adaptarlo
Múltiples formas
El polimorfismo va ligado a la herencia: objetos
jerárquicamente relacionados responden en forma
diferente al mismo mensaje
Polimorfismo VS
Sobrecarga
Sobrecarga Polimorfismo
se resuelve en tiempo de ejecución
(dependiendo de la clase a la que
pertenece el objeto que hace el llamado)
se da entre clases distintas.
se resuelve en tiempo de enlazado (cuando se esta construyendo
el ejecutable)
se da siempre en una sola clase
Método Abstracto
Método Abstracto
es un método declarado en
una clase para el cual esa clase no proporciona
la implementación
(el código).
Sin códigose declaran pero no se
definen.
No tendrá cuerpo y
terminará en punto y coma
Clase abstracta
Clase Abstracta
Tiene al menos un método
abstracto Declara la existencia de métodos pero
no la implementació
n
Puede contener
métodos no-abstractos
pero al menos uno de los
métodos debe serlo
no se puede instanciar pero
si se puede heredarCuando una
clase contiene un método
abstracto tiene que declararse
abstracta
no pueden tener métodos privados (no se podrían
implementar) ni tampoco
estáticos.
tiene que derivarse
obligatoriamente
Una clase que extiende a una clase abstracta
debe implementar los métodos abstractos o
volverlos a declarar como abstractos
Implementaciónpublic abstract class figura {
protected String nombre;protected int color;protected int grosorBorde;
public String getNombre(){return this.nombre;}public void setNombre(String n){this.nombre=n;}
public int getColor(){return this.color;}
public void setColor(int c){this.color=c;}
public int getGrosorBorde(){return this.grosorBorde;}
public void setGrosorBorde(int g){this.grosorBorde=g;}
public abstract void dibujar();}
public abstract class figura2D extends figura {
public abstract int calcularArea();
public abstract int calcularPerimetro();}
public abstract class figura3D extends figura {
public abstract int calcularVolumen();}
InterfaceIn
terf
ac
euna interface es una clase abstracta pura, es decir una clase donde todos los
métodos son abstractos
Si la interface va a tener atributos, éstos deben llevar las palabras reservadas staticfinal 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.
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
Implementación de una interface/**
* Declaracion de la interfaz Modificacion
* @author A. Garcia-Beltran
* Ultima revision: noviembre, 2007
*/
public interface Modificacion {
void incremento(int a);
}
/**
* Declaracion de la clase Acumulador
* @author A. Garcia-Beltran
* Ultima revision: noviembre, 2007
*/
public class Acumulador implements Modificacion {
private int valor;
public Acumulador (int i) {
valor = i;
}
public int daValor () {
return valor;
}
public void incremento (int a) {
valor += a;
}
}
/**
* Demostracion de la clase Acumulador
* @author A. Garcia-Beltran
* Ultima revision: noviembre, 2007
*/
public class PruebaAcumulador {
public static void main (String [] args) {
Acumulador p = new Acumulador(25);
p.incremento(12);
System.out.println(p.daValor());
}
}
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
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(){return «Nombre: «+nombre+»\nSalario: «+salario;}}
public class Jefe extends empleado {
String depto;
public String getDetalle(){return «Nombre: «+nombre+»\nDepartamento: «+depto;}
}
Llamada de métodos virtuales
¿Cual de los getDetalle() se ejecutará?
¿El de la clase empleado o el de la clase
Jefe?
Empleado e=new Jefe;
e.getDetalle();
Referencia
dinámica(En tiempo de
ejecución)
Referencia
estática(En tiempo de compilación)