2. En Java , on peut surcharger une méthode, c’est-à-dire,
définir (dans la même classe) plusieurs méthodes qui ont le
même nom mais pas la même signature (différenciées par le
type des arguments)
On parle de surcharge (overload) ou encore de surdéfinition
lorsqu’un même symbole possède plusieurs significations
différentes entre lesquelles on choisit en fonction du contexte.
Par exemple, dans des expressions arithmétiques telles que a+b :
la signification du symbole + dépend du type des variables a et b.
2
3. Considérons l’exemple1 suivant où la classe Affichage est
dotée de 2 méthodes afficherValeur:
- La première a un argument de type int
- La deuxième a un argument de type float
class Affichage{
public void afficherValeur(int i){
System.out.println("nombre entier =" + i);
}
public void afficherValeur(float f){
System.out.println("nombre flottant =" + f);
}
}
3
4. Considérons l’exemple2 suivant où la classe ClasseTest est
dotée de 2 méthodes calcMoyenne:
- La première a deux arguments de type double
- La deuxième a trois arguments de type double
public double calcMoyenne(double m1, double m2) {…}
public double calcMoyenne(double m1, double m2, double m3) {…}
4
5. class ClasseTest{
public double calcMoyenne(double m1, double m2) {
return (m1+m2)/2;
}
public double calcMoyenne(double m1, double m2, double m3) {
return (m1+m2+m3)/3;
}
}
public class TestSurcharge {
public static void main(String[] args) {
ClasseTest objA;
System.out.println(“Moy1="+objA.calcMoyenne(10., 12.2));
System.out.println(“Moy2="+objA.calcMoyenne(10., 12.6, 8.));
}
}
5
6. Considérons maintenant l’exemple3 suivant où la classe Point
est dotée de 3 méthodes déplace:
- La première a deux arguments de type int
- La deuxième a un seul argument de type int
- La troisième a un seul argument de type short
public void deplace (int dx, int dy) { x+=dx; y+=dy; }
public void deplace (int dx) { x+=dx; }
public void deplace (short dx) { x+=dx; }
6
7. class Point {
private int x,y;
public void initialise (int abs, int ord){ x=abs; y=ord; }
public void deplace (int dx, int dy) { x+=dx; y+=dy; }
public void deplace (int dx) { x+=dx; }
public void deplace (short dx) { x+=dx; }
}
public class Surcharge {
public static void main(String arg[]) {
Point a=new Point();
a.initialise(1,2);
a.deplace(1,3); // appel deplace (int,int)
a.deplace(2); // appel deplace (int)
short p=3;
// appel deplace (short)a.deplace(p);
byte b=2;
a.deplace(b); // appel deplace(short) après conversion de b en short
}
}
7
8. En Java, il est interdit de surcharger une méthode
en changeant le type de retour uniquement:
c’est-à-dire ne différencier les 2 méthodes que par
leur type retour.
Par exemple, on ne peut pas avoir les 2 méthodes
suivante dans une classe :
int division(int, int); // division entière
float division(int, int); // division réelle
8