140 votes

Surcharger avec un type de retour différent en java?

Donc, je viens de commencer Java et je n'ai pas été en mesure de trouver une réponse simple à la question de savoir pourquoi il est impossible de surcharger une fonction simplement en modifiant le type de retour. Pourquoi est-ce vrai? Cela changera-t-il dans une future version de Java?

En passant, juste pour référence, est-ce possible en C ++?

188voto

Alexander Gessler Points 26717

Vous ne pouvez pas le faire en Java ni en C ++. La logique est que la valeur de retour n'est pas suffisante pour que le compilateur sache quelle fonction appeler:

 public int foo() {...}
public float foo() {..}

...
foo(); // which one?
 

55voto

Oded Points 271275

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 faisant pas partie de la signature de la méthode, il ne peut donc pas être utilisé pour distinguer les surcharges.

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

23voto

Avant Java 5.0, lorsque vous substituez une méthode, les paramètres et le type de retour doivent correspondre exactement. En Java 5.0, il introduit une nouvelle fonction appelée type de retour covariant. Vous pouvez remplacer une méthode avec la même signature, mais renvoie une sous-classe de l'objet renvoyé. En d'autres termes, une méthode d'une sous-classe peut renvoyer un objet dont le type est une sous-classe du type renvoyé par la méthode avec la même signature dans la superclasse.

1voto

Ganesh Points 14

Le compilateur ne considère pas le type de résultat 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.

-1voto

sumit_dubey Points 1

Il y a une chance sur 1 où nous voyons une surcharge de méthode en Java dans une sous-classe (héritage) là où il est possible d'écrire des méthodes surchargées qui ne diffèrent que par les types de retour.

espérons que cela vous aide

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X