interface DomaineACle<T>{ T getCle(); void print(); } class SddGen<Y,X extends DomaineACle<Y>>{ X[] tab; int nb = 0; SddGen(X[] t){ tab = t; } void ajouter(X o){ tab[nb] = o; nb++; } X retrouver(Y cle){ for (int i = 0; i<nb; i++){ if (tab[i].getCle().equals(cle)) return tab[i]; } return null; } int nombreElem(){ return nb; } void voir(){ for (int i = 0; i<nb; i++){ tab[i].print(); } System.out.println(); } } abstract class Animal implements DomaineACle<Integer>{ String nom; Integer tatouage; String cri; Animal(String st, Integer tat){ nom=st; tatouage = tat; } public Integer getCle(){ return tatouage; } public void print(){ System.out.println(nom + " " + tatouage); } boolean repond(String n){ return n == nom; } void crie(){ System.out.print(cri); } abstract boolean court_t_y(); abstract boolean vole_t_y(); abstract boolean nage_t_y(); } class Chien extends Animal{ Chien(String nom, Integer tatouage){ super(nom, tatouage); cri = "ouah"; } boolean court_t_y(){ return true; } boolean vole_t_y(){ return false; } boolean nage_t_y(){ return true; } boolean mord_t_y(){ return true; } } class Serin extends Animal{ Serin(String nom, Integer tatouage){ super(nom, tatouage); cri = "cuicui"; } boolean court_t_y(){ return true; } boolean vole_t_y(){ return true; } boolean nage_t_y(){ return false; } void chante(){ for (int i = 0; i<15; i++){ this.crie(); } } } class Main{ public static void main(String[] argv){ Chien medor = new Chien("medor",new Integer(17)); SddGen<Integer,Animal> menagerie = new SddGen<Integer,Animal>(new Animal[50]); menagerie.ajouter(medor); for (int i=0; i<10; i++){ Serin oiseau = new Serin("serin"+i,new Integer(20+i)); menagerie.ajouter(oiseau); } menagerie.voir(); Animal animal25 = menagerie.retrouver(new Integer(25)); animal25.crie(); System.out.println(); } }