/** * Ce programme sert à montrer la surdéfinition et la redéfinition * des méthodes lors de l'héritage, en Java * @author Mohamed Lokbani * @version 1.0 */ /** * Classe de base: A */ class A { /** pour afficher un message relatif à la classe A. @param n : un entier bidon ... */ public void affiche(int n) { System.out.println("classe A: " + n); } /** pour afficher un message relatif à la classe A. @param n : un double bidon ... */ public void affiche(float n) { System.out.println("classe A: " + n); } } /** * Classe dérivée : B * Héritage à partir de la classe de base : B */ class B extends A { /** pour afficher un message relatif à la classe A. @param n : un entier bidon ... */ public void affiche(int n) { System.out.println("classe B: " + n); } /** Surdéfinition: même nom, mais signature différente. peu importe le type de retour pour afficher un message relatif à la classe B. @param z : un double bidon ... @return a boolean pour signifier affichage ok. */ public boolean affiche(double z) { System.out.println("classe B: " + z); return true; } } /** * classe de test point d'entrée pour la * machine virtuelle. */ public class herredsurd { public static void main(String [] args) { A a = new A(); B b = new B(); int w=4; double k=55.9; float zz = 5.3f; a.affiche(w); // affiche(int) de A // a.affiche(k); // affiche(int) de A => Erreur: impossible de convertir un double vers int ou float a.affiche(zz); // affiche(int) de A => Erreur: impossible de convertir un double vers int ou float b.affiche(w); // affiche(int) de B // b.affiche(zz); // affiche(int) de A ou affiche(double) de B => Erreur : les deux possibilités // se trouvent au même niveau. b.affiche(k); // affiche(double) de B System.exit(0); } }