Polimorfismo
-
Upload
kaddy-hernandez -
Category
Documents
-
view
290 -
download
1
Transcript of Polimorfismo
PolimorfismoLenguajes de Programación IICorporació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
ace
una 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 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.
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)