Poli = Multiple
, morfismo= Formas
, esto implica que un mismo Objeto puede tomar diversas formas.El poder manipular un Objeto como si éste fuera de un tipo genérico otorga mayor flexibilidad al momento de programar con Objetos, el término Polimorfismo también es asociado con un concepto llamado Late-Binding (Ligamiento Tardío),
EJEMPLO:
import java.util.*; class Instrumento { public void tocar() { System.out.println("Instrumento.tocar()"); } public String tipo() { return "Instrumento"; } public 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 Musica { // 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) { Instrumento[] orquesta = new Instrumento[5]; 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); } }
Clase Musica
En el código fuente de
Musica.java
son diseñadas diversas Clases que demuestran el uso de Polimorfismo: Instrumento
: Es utilizada como la Clase Base para el resto de Clases y en ella son definidos tres métodos:tocar,tipo
yafinar
.Guitarra
: Hereda ("Inherit") de la ClaseInstrumento
y redefine ("Override") los métodos de ésta.Piano
: Hereda ("Inherit") de la ClaseInstrumento
y redefine ("Override") los métodos de ésta.Saxofon
: Hereda ("Inherit") de la ClaseInstrumento
y redefine ("Override") los métodos de ésta.Guzla
: Hereda ("Inherit") de la ClaseGuitarra
y redefine ("Override") los métodos de ésta.Ukelele
: Hereda ("Inherit") de la ClaseGuitarra
y redefine ("Override") los métodos de ésta.
Musica
son descritas en los siguientes incisos: - El primer método definido en esta Clase llamado
afinar
toma como valor de entrada una referencia del tipoInstrumento
, sobre la cual es invocado el métodotocar
. - Un segundo método nombrado
afinarTodo
toma como valor de inicia un arreglo deInstrumento
, el cual es procesado por un ciclo que a su vez manda llamar el métodoafinar
con los respectivos valores del arreglo. - Dentro del método principal se define lo siguiente:
- Primeramente se genera un arreglo de
Instrumento
para 5 Objetos. - Se inicializa un primitivo
i
con un valor de cero. - A través de la referencia
orquesta
son asignados distintos Objetos al arreglo, nótese que aunque el arreglo es de tipoInstrumento
es posible asignar los Objetos:Guitarra,Piano,Saxofon,Guzla,Ukelele
. - Finalmente se invoca el método
afinarTodo
con la referencia que representa el arreglo deInstrumento
.
$ java Musica
Guitarra.tocar()
Piano.tocar()
Saxofon.tocar()
Guzla.tocar()
Ukelele.tocar()
No hay comentarios:
Publicar un comentario