import java.util.*; //tiré à l'origine d'un exemple de "thinking in java", mais modifié! abstract class Instrument { private int prix; //une classe abstraite peut quand même avoir un constructeur (qui sera appelé depuis les filles) public Instrument(int p){ prix = p; } //méthodes sans implémentations => abstract public abstract void play(); //méthodes "normales" public String toString() { return "Instrument"; } //observez que l'on peut appeler une méthode abstraite depuis une non abstraite public void spam(int x){ for(int i=1;i<=x;i++){ play(); } } //méthode static dans classe abstraite : ok public static int carre(int x){ return x*x; } //méthode abstract static interdite .. réflechir pourquoi ! // public abstract static int methode(int x); } class Wind extends Instrument { private int son; public Wind(int p, int frequenceSon){ super(p); son = frequenceSon; } //doit redéfinir play, sinon doit être abstract aussi public void play() { System.out.println("Wind.play() : " + son); } public String toString() { return "Wind"; } } class Percussion extends Instrument { public Percussion(){ super(1);//les percussions, c'est pas cher! } public void play() { System.out.println("Percu.play() : pouf"); } public String toString() { return "Percussion"; } } class Music4 { static void spamGeneral(Instrument[] e) { for (int i = 0; i < e.length; i++) e[i].spam(4); } public static void main(String[] args) { //Instrument i = new Instrument();//pas autorisé Instrument vent = new Wind(5,1000); Percussion percu = new Percussion(); Instrument[] orchestra = new Instrument[2]; orchestra[0] = vent; orchestra[1] = percu; Music4.spamGeneral(orchestra); } } ///:~