Remplacement d'une méthode avec différents types de retour en java?
J'ai lu un livre et il dit que je peux remplacer une méthode si elle a la même signature. selon le livre de la signature d'une méthode est Method_Name + Paramètres passés.
que par le livre, je peux remplacer une méthode qui a différents types de retour. Est-il réellement possible de surcharger une méthode avec différents type de retour en Java? parce que j'ai fait quelque recherche sur le net, j'ai trouvé des gens en disant que de remplacer une méthode du type de retour doit être la même que bien.
selon le livre il dit aussi que le java lèvera une erreur de compilation lorsque nous essayons de surcharge d'une méthode du même nom de la méthode et des paramètres mais différents types de retour depuis la signature signifie seulement le nom de la méthode et des paramètres. Si cela est vrai, nous devrions être en mesure de remplacer une méthode avec différents type de retour.
Merci de m'aider à comprendre cela. Merci à l'avance.
- Convariant types de retour ont été ajoutés dans Java 5.0 je ne voudrais pas vous soucier de rien avant de Java 6 trop. Il y avait un bug dans la version 6 de Java qui a permis de surcharger le type de retour, mais cela a été corrigé dans Java 7 😉
- double possible de Peut substituée méthodes diffèrent dans le type de retour?
Vous devez vous connecter pour publier un commentaire.
Vous pouvez retourner un type différent, aussi longue que il est compatible avec le type de retour de la méthode redéfinie. Compatible signifie: c'est une sous-classe, sous-interface, ou la mise en œuvre de la classe ou de l'interface retourné par la méthode de remplacement.
Et c'est logique. Si une méthode retourne un Animal, et votre classe dérivée renvoie une Vache, vous n'êtes pas de rompre le contrat de la super-classe de la méthode, car une Vache est un Animal. Si la classe dérivée renvoie une Banane, ce n'est pas correct de plus, depuis une Banane n'est pas un Animal.
Votre classe parent a fait une promesse à l'extérieur. Par exemple, la méthode:
public Price calculatePrice(Items[] items)
.Il raconte le monde de s'attendre à un Prix.
Si vous améliorez les fonctionnalités de votre sous-classe, vous devez toujours garder votre parent des classes d'origine des promesses pour elle.
Vous pouvez ajouter de la surcharge des moyens de calcul:
public Price calculatePrice(Items[] items, Integer minimumCharge)
.Vous pouvez même améliorer votre parent des promesses d'aide de façon PLUS spécifique le type de retour:
public AccuratePrice calculatePrice(Items[] items, Integer minimumCharge)
.Mais vous devez retourner au moins le type que votre parent a promis.
Il en va de même pour les Exceptions dans la déclaration de méthode trop.
Oui, il est possible depuis Java 5, il est appelé covariante type de retour. Le type de retour doit être un subcass de super méthode de classe de type de retour (types primitifs ne sont pas autorisés). Exemple
Voici un exemple:
Si vous modifiez le type de retour de la méthode surchargée quelque chose d'autre qui n'est pas un sous-type du type d'original, alors vous obtiendrez une erreur de compilation.