6
votes

Appels juridiques et détermination des fonctions surchargées en Java

Je fais de l'auto-étude au cours de l'été et je suis tombé sur ce problème, je ne suis pas sûr de, et je me demandais si quelqu'un pouvait aider. Je ne suis pas sûr du dernier numéro, mais j'ai inclus mes réponses précédentes si quelqu'un serait prêt à les vérifier aussi. Ce ne sont pas des devoirs pour aucune classe, je veux juste m'assurer que je comprends ce que je fais avant d'aller de l'avant.

J'envisage les définitions suivantes: xxx < p> que ces déclarations: xxx

et je examine ces appels: xxx

merci d'avance!


2 commentaires

L'avez-vous essayé vous-même? Si la question est pourquoi les surcharges sont cueillies, c'est une chose; Mais si la question est cueillie, c'est très facile à tester.


C'est une sorte de question des deux, mais vous avez raison, je n'ai même pas pensé à le tester. Il serait vraiment facile de comprendre. Merci!


3 Réponses :


2
votes

Le dernier appellera 3. Comme le premier argument est un objet, il ne peut choisir que l'une des méthodes avec un objet comme premier argument - de sorte que cela part 1 ou 3 comme options. Le troisième argument int s'inscrit dans le long de sorte que c'est légal dans les deux cas. Le deuxième argument peut être exactement installé dans 3, alors qu'il doit être élargi pour s'intégrer à 1. Le compilateur donne la préférence à une correspondance exacte sur l'élargissement.

Vos réponses précédentes sont également correctes.


1 commentaires

Merci beaucoup! Je n'ai pas réalisé que cet objet ne pouvait que s'adapter à un objet, mais la chaîne pourrait adapter l'objet / la chaîne. Une fois que vous avez signalé cela, je comprends immédiatement pourquoi il est 3.



2
votes

C'est un simple cas de "plus spécifique" à nouveau. L'option 3 est choisie pour la même raison que votre deuxième appel est illégal. m (v, a, a) ne peut pas choisir entre m (chaîne, long, int) et m (chaîne, int, long) Parce qu'ils sont également spécifiques. Chacun nécessite une seule conversion d'élargissement de l'un des arguments. m (o, a, a) , d'autre part, peut choisir entre m (objet, long, long) et m (objet, int, long ) . Un de ceux-ci nécessite deux conversions d'élargissement. L'autre nécessite un seul, ce qui en fait le plus spécifique.


1 commentaires

Merci beaucoup! J'aurais dû réaliser que cet objet ne pouvait pas correspondre à la chaîne. Si j'avais réalisé que j'aurais immédiatement été conduit à 3.



0
votes

m (v, b, b); Appelle 1, parce que c'est le seul qui va s'adapter (longtemps ne peut pas raccourcir pour intégrer).

Une autre raison de cet appel 1 est due au polymorphisme et à la hiérarchie individuelle de Java. Une chaîne (ou n'importe quel objet) est une descendante de la classe d'objets. Toute méthode qui prend un objet comme argument peut prendre une chaîne - l'essence du polymorphisme.


0 commentaires