Question

Pourquoi le type de retour d'une méthode n'est pas pris en compte dans la surcharge de méthode? Quelqu'un peut-il expliquer, comment les utiliser compilateur pour les méthodes surchargées?

Était-ce utile?

La solution

  

Pourquoi le type de retour d'une méthode n'est pas pris en compte dans la surcharge de méthode?

La principale raison est que si vous ne Considérez ceci, beaucoup d'appels de fonction deviennent ambiguës si la valeur de retour n'est pas affectée à quelque chose. Par exemple, la fonction qui appel est invoqué ici?

public String x() { ... }
public int x() { ... }

// ...

x();  // <-- Which one did you mean? It's impossible to tell if you
      //     allow return types to be part of method overloads.

Il y a d'autres raisons de ne pas vouloir le faire, aussi. Cela dit, de nombreuses langues faire permettent à leurs signatures ne diffèrent que par le type de retour; Haskell et Perl sont deux exemples. Si votre langue ne permet cela, il est pas difficile de voir que tout ce que vous auriez besoin de soutenir c'est une étape dans votre processus méthode de résolution: ont simplement une manière évidente pour le compilateur de choisir une méthode ou une autre. Dans l'exemple ci-dessus, nous peut-être définir une priorité (peut-être la première méthode définie est celle qui gagne, par exemple, notre appel x() invoquerait String x()).

Une autre chose à noter est que la machine virtuelle Java Finalité permettent deux méthodes dont la signature ne diffère que par type de retour d'exister. (Voilà comment Scala et d'autres langages JVM qui prennent en charge ce faire.

Autres conseils

  

Quelqu'un peut-il expliquer, comment compilateur vérifie les méthodes surchargées?

La spécification du langage Java, section 8.4.9, contiendra la réponse définitive (mais très technique): http://java.sun.com/ docs / livres / JLS / third_edition / html / classes.html # 8.4.9

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top