next up previous contents
suivant: Exceptions monter: Expressions, Opérateurs, Tableaux précédent: Conversions de types   Table des matières

Accès aux membres

Pour une méthode, il faut que le type et le nombre des arguments déterminent exactement la méthode associée.

Sans surcharge, il n'y a pas de problème.

La surcharge (+ l'héritage) peut compliquer un peu la façon dont est déterminée la méthode invoquée.

Le compilateur essaie de déterminer la méthode qui correspond le mieux :

  1. chercher toutes les méthodes possibles pour les paramètres, si parmi elles une correspond exactement la choisir,
  2. supprimer les méthodes ``moins spécifiques'' : une méthode est moins spécifique qu'une autre si tous les paramètres de la seconde peuvent être affectés par les paramètres de la première,
  3. si après cela il ne reste qu'une méthode c'est elle qui sera choisie, sinon l'invocation est invalide.



transparent
Surcharge


          A       f(A,Y)
         / \
        X   Y     f(X,A)
        |   |
        Z   T     f(Z,Y)
f(Aref a,  Yref y)   //OK f(A,Y)
f(Zref z,  Aref a)   //OK f(X,A)
f(Wref z,  Tref t)   //OK f(Z,Y)
f(Xref x,  Yref y)   // non



next up previous contents
suivant: Exceptions monter: Expressions, Opérateurs, Tableaux précédent: Conversions de types   Table des matières
Hugues Fauconnier 2002-01-11