7
votes

Ordre de type avec des méthodes surchargées en Java

donné deux méthodes sur la même classe en Java: xxx pré>

où p> xxx pré>

si j'appelle: p>

doSomething( employee )


0 commentaires

4 Réponses :


3
votes

Comment était employé déclaré? Si cela a été déclaré comme employé de la personne = nouvel employé (); , puis DOSMATUX (personne) est en effet la surcharge correspondante la plus proche.

Contrairement aux substitutions, les surcharges sont déterminées lors de la compilation. Par conséquent, même si le type d'exécution de Employee est Employee , la surcharge de la personne a déjà été choisie pour être exécutée.

Voir le JLS §8.4.9 Surcharge :

Lorsqu'une méthode est invoquée (§15.12) , le nombre d'arguments réels (et de tout argument de type explicite) et les types d'arguments de compilation des arguments sont utilisés, au moment de la compilation, pour déterminer la signature de la méthode qui sera appelée (§15.12.2) . Si la méthode à appelée est une méthode d'instance, la méthode réelle à appelé sera déterminée au moment de l'exécution, à l'aide de la méthode dynamique Lookup (§15.12.4) .


0 commentaires

13
votes

La surcharge applicable la plus spécifique est utilisée - mais cette surcharge est déterminée à compiler -time, basée sur le type d'heure de la compilation de la variable de l'employé .

in autres mots: xxx

mais: xxx

Notez que cela est différent de remplacer où il est Le type l'heure d'exécution type de l'objet cible qui est important.


3 commentaires

Garçon votre travail rapide, la deuxième fois que vous m'avez battu à la réponse aujourd'hui :)


Pas de salon, je vous ai battus tous les deux (bien que je dois admettre ma première version n'était pas extrêmement utile).


La façon dont Jon répond est comme la lecture d'un manuel de référence - complète, concise, au point. Homme ce gars me fait chier. :)



0
votes

sur appeler un surchargé, la méthode avec la signature correspondante la plus proche sera appelée. Je soupçonne votre Employee est une variable personne . Donc, à l'appel de la méthode, le type de référence de Employee provoque votre Dosomething (personne) pour être sélectionné.


0 commentaires

1
votes

La sélection de la méthode est effectuée au moment de la compilation, pas l'heure d'exécution, donc si vous aviez

Person employee = new Employee();
doSomething(employee);


0 commentaires