Surcharge avec un type de retour différent en Java?

Pourquoi n’est-il pas possible de surcharger une fonction simplement en modifiant le type de retour? Est-ce que cela changera dans une future version de Java?

Au fait, juste pour référence, est-ce possible en C ++?

Vous ne pouvez pas le faire en Java, et vous ne pouvez pas le faire en C ++. La raison en est que la valeur de retour seule ne suffit pas pour que le compilateur puisse déterminer quelle fonction appeler:

public int foo() {...} public float foo() {..} ... foo(); // which one? 

La raison en est que les surcharges en Java ne sont autorisées que pour les méthodes avec des signatures différentes.

Le type de retour ne fait pas partie de la signature de la méthode et ne peut donc pas être utilisé pour distinguer les surcharges.

Voir Définition de méthodes à partir des didacticiels Java.

Avant Java 5.0, lorsque vous remplacez une méthode, les parameters et le type de retour doivent correspondre exactement. Dans Java 5.0, il introduit une nouvelle fonctionnalité appelée type de retour covariant. Vous pouvez remplacer une méthode avec la même signature mais retourne une sous-classe de l’object renvoyé. En d’autres termes, une méthode dans une sous-classe peut renvoyer un object dont le type est une sous-classe du type renvoyé par la méthode avec la même signature dans la super-classe.

Overloaded méthodes Overloaded en Java peuvent avoir des types de retour différents étant donné que les listes d’arguments sont également différentes.

Le compilateur ne considère pas le type de retour lors de la différenciation des méthodes, vous ne pouvez donc pas déclarer deux méthodes avec la même signature, même si elles ont un type de retour différent.

Le type de retour n’a pas d’importance lors de la surcharge d’une méthode. Nous devons juste nous assurer qu’il n’y a pas d’ambiguïté!

La seule façon dont Java peut savoir quelle méthode appeler est en différenciant les types de la liste d’arguments. Si le compilateur autorisait deux méthodes avec le même nom et le même type d’argument, il n’y aurait aucun moyen de déterminer celui qu’il devrait appeler.

Le compilateur ne considère pas le type de retour lors de la différenciation des méthodes, vous ne pouvez donc pas déclarer deux méthodes avec la même signature, même si elles ont un type de retour différent.

Si vous êtes au courant de l’exécution de la fonction, vous saurez que lorsque nous appelons une fonction, la partie définition s’exécute et nous avons enfin besoin de l’instruction return. Nous pouvons donc dire que retour vient après la définition complète de la fonction. plus de fonctions avec le même nom et avec le même type et non. des arguments au moment d’appeler comment le compilateur saura lequel appeler, car le nom de la fonction et les parameters sont les mêmes. Au moment de l’appel, tout le focus sera sur les arguments et le nom de la fonction et après l’achèvement de la définition de la fonction, nous traiterons enfin de l’instruction return.

L’erreur de compilation est meilleure que l’erreur d’exécution. Ainsi, le compilateur Java rend l’erreur de temps du compilateur si vous déclarez la même méthode avec les mêmes parameters.

non pas vraiment possible de cette façon, vous ne pouvez surcharger que par aucun argument ou type de données des arguments