UNIDAD 4 POLIMORFISMO El Polimorfismo es la respuesta distinta frente a una llamada a un método dependiendo de la naturaleza del objeto.
Consiste en definir métodos distintos, que comparten el
mismo nombre, pero que se aplican a clases diferentes El polimorfismo es una de las principales aplicaciones de la herencia y supone el principal motivo de las clases abstractas. Ventaja
La principal ventaja del polimorfismo es la reutilizacion
de codigo Asignacion de objetos a variables de su super clase
En java, es posible asignar un objeto de una clase a una
variable de su superclase.
Por ejemplo, dada una variable de tipo Figura
Figura f;
Es posible asignar a esta variable el objeto Triangulo
f =new Triangulo(); A partir de aqui, se puede utilizar la variable para invocar a aquellos metodos del objeto que tambien esten definidos o declarados en la superclase, pero no aquellos que solo existan en la clase a la que pertenece el objeto Tras la conexión polimorfa únicamente podemos acceder a las operaciones pertenecientes a la clase asociada a la referencia.
El resto de operaciones del objeto no son
accesibles a través de esta referencia Variable polimorfica • Una variable referencia es polimórfica cuando su tipo de declaración no coincide con el tipo del objeto al que referencia: Figura f1 = new Figura(“Estandar”, “Rojo”);
Figura f2 = new Circulo(“Verde”, 5.0);
f2 variable polimorfica. • Clases abstractas: A menudo existen clases que sirven para definir un tipo genérico pero que no sentido instanciar (crear objetos de ella). • Métodos abstractos: Un método abstracto significa que tiene que ser sobrescrito. No está implementado. Una clase con uno o varios métodos abstractos tiene que ser declarada abstracta. • No obstante una clase abstracta no tiene porque tener métodos abstractos. INTERFACES (herencia múltiple) • Los interfaces en Java nos solucionan en parte la no existencia de la herencia múltiple.
• Los interfaces son un tipo de clase especial
que no implementa ninguno de sus métodos. Todos son abstractos. Por tanto no se pueden instanciar. • De los interfaces también se hereda, aunque se suele decir implementa. Y se realiza mediante la palabra: implements. • Si una clase que hereda de un interface, no implementa todos los métodos de este, deberá ser definida como abstracta. • ¿Para qué se utiliza? • Para permitir la herencia múltiple (ya que la herencia en Java sólo permite heredar de una sola clase) • Definen un comportamiento (o funcionalidad) genérico, ignorando los aspectos relacionados con su implementación. • Las interfaces que implementa una clase se comportan igual que las superclases en lo que respecta al uso del polimorfismo. • Subclase: Necesitemos hacer una especialización de la superclase mediante sobre escritura o añadiendo nuevos métodos.
• Clase abstracta: Queremos definir un grupo
genérico de clases y además se tiene algunos métodos implementados que reutilizar. • Interface: Queremos definir un grupo genérico de clases y no tenemos métodos implementados que reutilizar. O cuando nos veamos forzados por la falta de herencia múltiple en Java. Interface vs. Clase Abstracta • Un interface no puede implementar ningún método. • Un interface no forma parte de la jerarquía de clases. • Una clase puede implementar n interfaces pero solo una clase. • El objetivo de un método abstracto es forzar una interfaz (API) pero no una implementación • Haremos un interface cuando queramos definir un grupo genérico de clases y no tengamos métodos implementados que reutilizar. O cuando nos veamos forzados por la falta de herencia múltiple en Java.