Get Started. It's Free
or sign up with your email address
Polimorfismo by Mind Map: Polimorfismo

1. Introducción

1.1. El polimorfismo es la capacidad que tienen los LOO de ofrecer distintas implementaciones para un mismo método: Polimorfismo≡múltiples formas

1.2. Una llamada a un mismo método puede tener comportamientos distintos.

2. Sobreescritura de métodos

2.1. En ocasiones interesa que la subclase modifique algunos de los métodos heredados para que tengan un comportamiento distinto. Hay dos formas de sobreescribir un método: Reemplazo Refinamiento

2.1.1. Reemplazo: se reescribe el método completamente, ignorando el código de la superclase.

2.1.2. Refinamiento: se amplía el método de la superclase con instrucciones extras.

2.2. Si se declara un método como final, se impide su sobreescritura.

2.3. Si se declara una clase como final, se impide que se extienda.

3. Clases Abstractas

3.1. Una clase abstracta no puede ser instanciada.

3.2. Si una subclase que extiende una clase abstracta no implementaalguno de los métodos abstractos declarados en la superclase, entonces debe ser declarada también como abstracta.

3.3. Una clase abstracta puede tener métodos no abstractos.

3.4. Se pueden declarar variables referencia cuyo tipo sea una claseabstracta.

3.5. Aunque las clases abstractas no se pueden instanciar, sí que pueden tener constructores.

3.6. EJERCICIO

3.6.1. import java.util.*; abstract class Instrumento { public abstract void tocar(); public String tipo() { return "Instrumento"; } public abstract void afinar(); } class Guitarra extends Instrumento { public void tocar() { System.out.println("Guitarra.tocar()"); } public String tipo() { return "Guitarra"; } public void afinar() {} } class Piano extends Instrumento { public void tocar() { System.out.println("Piano.tocar()"); } public String tipo() { return "Piano"; } public void afinar() {} } class Saxofon extends Instrumento { public void tocar() { System.out.println("Saxofon.tocar()"); } public String tipo() { return "Saxofon"; } public void afinar() {} } // Un tipo de Guitarra class Guzla extends Guitarra { public void tocar() { System.out.println("Guzla.tocar()"); } public void afinar() { System.out.println("Guzla.afinar()"); } } // Un tipo de Guitarra class Ukelele extends Guitarra { public void tocar() { System.out.println("Ukelele.tocar()"); } public String tipo() { return "Ukelele"; } } public class Musica2 { // No importa el tipo de Instrumento, // seguirá funcionando debido a Polimorfismo: static void afinar(Instrumento i) { // ... i.tocar(); } static void afinarTodo(Instrumento[] e) { for(int i = 0; i < e.length; i++) afinar(e[i]); } public static void main(String[] args) { // Declarar un Arreglo SIN INSTANCIAS es valido en Clases Abstractas Instrumento[] orquesta = new Instrumento[5]; // Generar una INSTANCIA de una la Clase Abstracta no es valido // Instrumento nuevo = new Instrumento(); int i = 0; // Up-casting al asignarse el Arreglo orquesta[i++] = new Guitarra(); orquesta[i++] = new Piano(); orquesta[i++] = new Saxofon(); orquesta[i++] = new Guzla(); orquesta[i++] = new Ukelele(); afinarTodo(orquesta); } }

3.6.1.1. fuente:

3.6.1.1.1. http://javabasico.osmosislatina.com/curso/progfinal/cabstractas.htm

4. Sobreescribir métodos de Object

4.1. La clase Object tiene métodos que puede interesar sobreescribir.

4.1.1. boolean equals (Object o): compara dos objetos.

4.1.2. String toString(): devuelve una cadena de tipo String que contiene una descripción del objeto. Se invoca automáticamente cuando se utiliza el objeto como si fuera una cadena

4.1.3. void finalize(): se ejecuta automáticamente al destruirse el objeto.

4.2. Uso del método toString: Complejo c = new Complejo(2,3); System.out.println(c);

4.2.1. Al utilizar c como si fuera un String, se invoca automáticamente almétodo toString. System.out.println(c.toString());

4.2.2. Si no está sobreescrito, se invoca toString de Object.

4.2.3. Sobreescritura de toString:

4.2.3.1. class Complejo { double real, imag; . . . public String toString() { String s = real + “+” + imag + “i”; return s; } } Complejo c = new Complejo(2,3); System.out.println(c);// Se invoca el método toString

4.2.3.1.1. Salida por pantalla: 2+3i

5. Tipos de polimorfismo:

5.1. Sobrecarga (Overloading, Polimorfismo ad-hoc): un solo nombre de método y muchas implementaciones distintas. • Las funciones sobrecargadas normalmente se distinguen en tiempo de compilación por tener distintos parámetros de entrada y/o salida.

5.1.1. Factura :: imprimir () Factura :: imprimir ( int numCopias) Factura :: imprimir ()

5.2. Sobresescritura ( Overriding, Polimorfismo de inclusión): Tipo especial de sobrecarga que ocurre dentro de relaciones de herencia. • En este caso la signatura es la misma pero los métodos se encuentran en dos clases distintas.

5.2.1. Cuenta :: abonarInteres() CuentaJoven :: abonarInteres()

5.3. Variables polimórficas ( Polimorfismo de asignación): variable que se declara como de un tipo pero que referencia en realidad un valor de tipo distinto. • Cuando una variable polimórfica se utiliza como argumento, la función resultante se dice que exhibe un polimorfismo puro.

5.3.1. Cuenta * pc = new CuentaJoven();

5.4. Genericidad ( Plantillas o templates): forma de crear herramientas de propósito general ( clases, métodos) y especialializarlas para situaciones específicas.

5.4.1. Lista<Cliente> Lista<Artículo> Lista<Alumno> Lista<Habitación>