viernes, 25 de noviembre de 2011

Ejemplo de polimorfismo en Java

Polimorfismo (poli-múltiple morfismo-formas)

Significa que un mismo objeto puede tomas varias formas.

El polimorfismo es un concepto de la programación orientada a objetos que nos permite programar en forma general, en lugar de hacerlo en forma específica. En general nos sirve para programar objetos con características comunes y que todos estos compartan la misma superclase en una jerarquía de clases, como si todas fueran objetos de la superclase. Esto nos simplifica la programación.



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);
    }
}

1 comentario:

  1. Excelente! Estaba buscando un ejemplo para un curso. Voy a utilizarlo. Gracias.

    ResponderEliminar