Il s'agit d'un mécanisme fondamental consistant à donner une nouvelle
définition pour une fonction avec un nouveau profil :
cela signifie que une fonction de nom
donné peut posséder plusieurs définitions une même classe, chacune
de ces définitions se distinguant des autres
au travers de la liste de ses paramètres
(par contre le type du résultat n'intervient pas dans cette
différenciation).
Conjuguée avec le mécanisme d'héritage, lié à la notion de
sous-classes, la surcharge constitue l'un des mécanismes central de
la programmation objet.
Il faut dès maintenant distinguer
la surcharge de la redéfinition, dont nous parlons dans la section suivante
qui, elle, consiste à donner dans une sous-class une nouvelle définition
d'une fonction pour un profil pour lequel une définition existe dans
une sur-classe (directe ou non).
Notons au passage que nous avons déjà utilisé la surcharge lors de la définition
de constructeurs d'objets et avons vu à cette occasion
que la sélection par le compilateur de la méthode
à invoquer est réalisée sur la base de la liste et du type
de ses différents paramètres.
Ce que nous avons fait pour les constructeurs peut l'être pour toute
méthode d'une classe.
B ;ajouter
de la classe
B ;B
de la méthode publique
toString
(définie dans la classe
Object).
--> cat Surcharge.java
class A {
int a, b;
A(int a, int b){this.a = a; this.b = b; }
}
class B{
private A couple;
B(int a, int b){couple = new A(a,b); }
B(A couple){this.couple = new A(couple.a, couple.b); }
A getA( ){ return couple;}
void ajouter(int inc){getA().a += inc; getA().b += inc; }
void ajouter(B couple){
this.getA().a += couple.getA().a;
this.getA().b += couple.getA().b;
}
public String toString(){return "(" + getA().a +"," + getA().b + ")" ;}
}
public class Surcharge {
public static void main(String[] arg){
B c1 = new B(3, 5);
B c2;
System.out.println("c1=" + c1);
c1.ajouter(5);
System.out.println("c1=" + c1);
c2 = new B(c1.getA());
c2.ajouter(c1);
System.out.println("c1=" + c1);
System.out.println("c2=" + c2);
}
}
--> java Surcharge
c1=(3,5)
c1=(8,10)
c1=(8,10)
c2=(16,20)
-->
|
+ afin qu'il permette par exemple
d'écrire une expression telle que M1 + M2 ayant comme valeur
la somme des deux matrices. Notons cependant au passage que cet opérateur est d'une
certaine manière surchargé puisque qu'il permet de réaliser la concaténation de chaînes de caractères.