donné deux méthodes sur la même classe en Java: où p> si j'appelle: p> doSomething( employee )
4 Réponses :
Comment était 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 Voir le JLS §8.4.9 Surcharge : p>
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) . P>
blockQuote> employé code> déclaré? Si cela a été déclaré comme employé de la personne = nouvel employé (); code>, puis DOSMATUX (personne) code> est en effet la surcharge correspondante la plus proche. P>
Employee code> est Employee code>, la surcharge code> de la personne code> a déjà été choisie pour être exécutée. P>
La surcharge applicable la plus spécifique est utilisée - mais cette surcharge est déterminée à compiler em> -time, basée sur le type d'heure de la compilation de la variable code> de l'employé code>. in autres mots: p> mais: p> Notez que cela est différent de remplacer em> où il est Le type l'heure d'exécution em> type de l'objet cible qui est important. p> p>
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. :)
sur appeler un surchargé, la méthode avec la signature correspondante la plus proche sera appelée. Je soupçonne votre Employee code> est une variable code> personne code>. Donc, à l'appel de la méthode, le type de référence de Employee code> provoque votre Dosomething (personne) code> pour être sélectionné. P>
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);