Uso de Polimorfismo

Código Fuente Musica.java

 
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:

Las definiciones de la Clase principal Musica son descritas en los siguientes incisos:

Al ser ejecutado este programa se obtienen los siguientes resultados:

$ java Musica
Guitarra.tocar()
Piano.tocar()
Saxofon.tocar()
Guzla.tocar()
Ukelele.tocar()

Lo interesante de este resultado reside en la manera que fue realizada la invocación de métodos, el método que realiza las llamadas hacia las diversas clases es afinar dentro de la Clase Musica, observe que este método toma como valor inicial una referencia del tipo Instrumento y se invoca el método tocar.

Sin embargo, al ser invocado el método tocar a pesar de ser a través de una referencia Instrumento es invocado el método de Clase acordemente, esto es, se llama el método de la Clase especifica; lo anterior es una labor de Polimorfismo ya que ocurre el comportamiento adecuado a pesar de realizarse las llamadas a través de una clase general (Instrumento).

Menú Curso

Objetos, Java y JDK

Composición, Clases y Librerías("Packages").

Variables, Constructores, Métodos y Comentarios.

Herencias ("Inheritance"), Condicionales y Ciclos

Operadores, Errores y Datos de Entrada/"Streams".

Interfases, Arreglos y Polimorfismo.

Collections Framework, "Threads", Garbage Collection y "Assertions".

Java 5 / JDK 5 .

Instalación Software.

Codigo.