180 likes | 447 Views
Polimorfismo. Lenguajes de Programación II Corporación Universitaria del Caribe CECAR. Múltiples formas. Polimorfismo (Definición). El polimorfismo va ligado a la herencia: objetos jerárquicamente relacionados responden en forma diferente al mismo mensaje. Polimorfismo VS Sobrecarga.
E N D
Polimorfismo Lenguajes de Programación II Corporación Universitaria del Caribe CECAR
Múltiples formas Polimorfismo (Definición)
El polimorfismo va ligado a la herencia: objetos jerárquicamente relacionados responden en forma diferente al mismo mensaje
Implementación public abstract class figura2D extends figura {public abstract intcalcularArea();public abstract intcalcularPerimetro();} publicabstractclassfigura {protectedString nombre;protectedint color;protectedintgrosorBorde;publicStringgetNombre(){returnthis.nombre;}publicvoidsetNombre(String n){this.nombre=n;}publicintgetColor(){returnthis.color;}publicvoidsetColor(int c){this.color=c;}publicintgetGrosorBorde(){returnthis.grosorBorde;}publicvoidsetGrosorBorde(int g){this.grosorBorde=g;}publicabstractvoiddibujar();} public abstract class figura3D extends figura {public abstract intcalcularVolumen();}
Ejemplo Interface • interfacenombre_interface {tipo_retornonombre_metodo( lista_argumentos) ; . . . } Por ejemplo: • interfaceInstrumentoMusical {void tocar();void afinar();StringtipoInstrumento();} 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 /** * Demostracion de la clase Acumulador * @author A. Garcia-Beltran * Ultima revision: noviembre, 2007 */ publicclassPruebaAcumulador { publicstaticvoidmain (String [] args) { Acumulador p = new Acumulador(25); p.incremento(12); System.out.println(p.daValor()); } } /** * 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 */ publicclass Acumulador implementsModificacion { privateint valor; public Acumulador (int i) { valor = i; } publicintdaValor () { return valor; } publicvoidincremento (int a) { valor = valor+a; } }
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) publicclassempleado {String nombre;int salario;publicStringgetDetalle(){ return"Nombre: "+nombre+"\nSalario: "+salario; } }} publicclassJefeextendsempleado {Stringdepto; publicStringgetDetalle(){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();