//module: Surdefinition.java //auteur: felipe //objet: montrer la surdefinition //comment: l'algorithme de resolution est le suivant: // 1) cherche une methode qui mappe au types pres // 2) si rate, alors tente la coersion des arguments // si une seule methode match alors c'est celle qui est appellee // sinon : ambiguite => ERREUR public class Surdefinition { static int maFonction() {System.out.println("maFontion()"); return 1;} static int maFonction(int i) {System.out.println("maFontion(int)"); return 1;} static int maFonction(long i) {System.out.println("maFontion(long)"); return 1;} static int maFonction(double i) {System.out.println("maFonction(double)"); return 1;} static int maFonction(double i, int j) {System.out.println("maFonction(double,int)"); return 1;} static int maFonction(int i, double j) {System.out.println("maFonction(int,double)"); return 1;} static int maFonction(int i, int j, int k) {System.out.println("maFonction(int,int,int)"); return 1;} // ceci est une erreur : on ne surdefini pas sur le type de retour // static double maFonction() {System.out.println("maFontion()"); return 1.5;} // methode principale public static void main (String [] args) { maFonction(); maFonction(3); maFonction(3l); maFonction(3.2); maFonction(3.2f); // appel au mecanisme de coersion => double maFonction(3.2,3); maFonction(3,3.2); // maFonction(3,3); // erreur car ambiguite apres coersion maFonction(1,2,3); // maFonction(1,2,3.2); // erreur car les conversion degradantes ne sont jamais faites en JAVA maFonction(1,2,(int) 3.2); // CONSEIL: ne pas abuser de la surdefinition (c'est cependant utile) } }