Qu'est-ce qu'un type de retour covariant en Java? Dans la programmation orientée objet en général?
java
oop
covariance
Pops
la source
la source
Réponses:
Retour covariant, signifie que lorsque l'on remplace une méthode, le type de retour de la méthode de substitution est autorisé à être un sous-type du type de retour de la méthode remplacée.
Pour clarifier cela avec un exemple, un cas courant est
Object.clone()
- qui est déclaré pour renvoyer un type deObject
. Vous pouvez remplacer cela dans votre propre classe comme suit:L'avantage ici est que toute méthode contenant une référence explicite à un objet MyFoo pourra invoquer
clone()
et savoir (sans conversion) que la valeur de retour est une instance deMyFoo
. Sans les types de retour covariants, la méthode surchargée dans MyFoo devrait être déclarée pour returnObject
- et donc l'appel du code devrait explicitement réduire le résultat de l'appel de méthode (même si les deux côtés "savent", il ne peut être qu'une instance de MyFoo ).Notez qu'il n'y a rien de spécial
clone()
et que toute méthode surchargée peut avoir un retour covariant - je l'ai utilisé comme exemple ici car c'est une méthode standard où cela est souvent utile.la source
List<Foo>
etList<FooBar>
?clone()
comme étant unMethod<Void, Object>
, et demander si le plus spécifiqueMethod<Void, MyFoo>
est attribuable à ce type de parent. Ce qui est le cas, si et seulement si les méthodes Java sont covariantes dans leur type de retour.Voici un autre exemple simple:
Animal
classeDog
classeIl est possible de modifier le type de retour de la méthode
Dog
sseekFood()
enDogFood
- une sous-classe deFood
, comme indiqué ci-dessous:C'est parfaitement une substitution légale, et le type de retour de
Dog
laseekFood()
méthode de est connu sous le nom de type de retour covariant .la source
Depuis la sortie de JDK 1.5, des types covariants ont été introduits dans Java. et je vais vous l'expliquer avec un cas simple: lorsque nous surchargons une fonction, la fonction est autorisée à modifier son comportement, c'est ce que vous lisez dans la plupart des livres, mais ce qu'ils {auteurs} manquent est que nous pouvons également changer le type de retour. Vérifiez le lien ci-dessous pour plus de précisions, nous pouvons changer le type de retour tant qu'il peut être attribué au type de retour de la version de base de la méthode.
Donc, cette fonctionnalité de retour de types dérivés est appelée COVARIANT ...
Les méthodes remplacées peuvent-elles différer dans le type de retour?
la source
covariant Les types de retour signifie simplement renvoyer sa propre référence de classe ou sa référence de classe enfant.
la source
Parent.foo()
renvoie un type non liéA
etChild.foo()
retourne un typeB
dérivé deA
.Pour ajouter aux réponses ci-dessus, le remplacement est possible parmi les types de retour co-variant, avec la contrainte que le type de retour de la méthode de substitution (méthode de sous-classe) doit être une sous-classe du type de retour de la méthode de substitution (méthode de superclasse). Ceci est valable à partir de Java 5.
la source
Le type de retour covariant spécifie que le type de retour peut varier dans le même sens que la sous-classe
Avant Java 5, il n'était pas possible de remplacer une méthode en modifiant le type de retour. Mais maintenant, depuis Java5,
il est possible de remplacer la méthode en changeant le type de retour si la sous-classe remplace toute méthode dont le type de retour est Non-primitif mais elle change son type de retour en type de sous-classe.
la source
Nous avons la liberté d'avoir des types de retour plus spécifiques lors de la substitution de
méthodes.
Aide à empêcher les ClassCastExceptions d'exécution sur les retours
référence: www.geeksforgeeks.org
la source
UnaryOperator.java
Function.java
la source
Avant Java5, il n'était pas possible de remplacer une méthode en modifiant le type de retour. Mais maintenant, depuis Java5, il est possible de remplacer la méthode en changeant le type de retour si la sous-classe remplace toute méthode dont le type de retour est Non-primitif mais elle change son type de retour en type de sous-classe.
la source