domingo, 20 de mayo de 2012

Polimorfismo con herencia

CASTING IMPLICITO

 Instrumento.java

public class Instrumento {

    public void interpreta() {
        System.out.println("Interpreta el instrumento");
    }

    public String queEs() {
        return "Instrumento";
    }

    public void afinar() {}

}

Guitarra.java

public class Guitarra extends Instrumento {

    public void interpreta() {
        System.out.println("Interpreta la guitarra");
    }
   
    public String queEs() {
         return "Guitarra";
    }
}

Piano.java

public class Piano extends Instrumento {

    public void interpreta() {
       System.out.println("Interpreta el piano");
    }

     public String queEs() {
        return "Piano";
     }
}

Saxofon.java

public class Saxofon extends Instrumento {

    public void interpreta() {
        System.out.println("Interpreta el saxofon");
    }
   
    public String queEs() {
         return "Saxofon";
    }
}

Guzla.java

public class Guzla extends Guitarra {
   
   public void interpreta() {
         System.out.println("Interpreta la guzla");
   }
  
   public void afinar() {
         System.out.println("Afino Guzla");
   }
 }

Ukelele.java

public class Ukelele extends Guitarra {

    public void interpreta() {
         System.out.println("Interpreta el Ukelele");
    }
   
    public String queEs() {
            return "Ukelele";
    }
}

Musica.java

public class Musica {

    // El casting es inherente porque todos los metodos se encuentran
    // declarados en la superclase.
    void afinar(Instrumento i) {
        i.interpreta();
    }

   void afinarTodo(Instrumento[] e) {

       for(int i = 0; i < e.length; i++)
          afinar(e[i]);
    }
}

Main.java

public class Main {

  public static void main(String[] args) {

     Musica miMusica = new Musica();

    Instrumento[] orquesta = new Instrumento[5];
    orquesta[0] = new Guitarra();
    orquesta[0] = new Piano();
    orquesta[0] = new Saxofon();
    orquesta[0] = new Guzla();
    orquesta[0] = new Ukelele();

    miMusica.afinarTodo(orquesta);

  }
}

Dibujemos el diagrama de clases

No hay comentarios:

Publicar un comentario

Muchas gracias por su comentario, será revisado y pronto se publicará.