Comprendre la covariance, l'invariance et la contravariance en anglais simple
La covariance, l'invariance et la contravariance sont des termes qui décrivent comment les relations de frappe se comportent sous certaines conditions. transformations. En programmation, ces transformations peuvent être des conversions de type, un remplacement de méthode ou un héritage.
Covariance
La covariance signifie qu'un sous-type d'un type sera également un sous-type du type transformé. Par exemple, si la classe A est un sous-type de la classe B et que nous avons une fonction f(T) qui prend un type T et renvoie un type transformé T'', alors si A est un sous-type de B, f(A) être également un sous-type de f(B).
Contravariance
La contravariance est l'opposé de la covariance. Par contre, un sous-type d'un type sera mappé à un supertype du type transformé. Si la même fonction f(T) de l'exemple de covariance ci-dessus était contravariante, alors si A est un sous-type de B, f(B) serait un sous-type de f(A).
Invariance
L'invariance signifie que ni la covariance ni la contravariance ne s'appliquent à la transformation. Autrement dit, la relation de sous-type n'est pas affectée par la transformation.
Exemples
Considérez les exemples suivants :
Java Generics
Les génériques en Java sont invariants. Cela signifie que List
Les tableaux
Les tableaux en Java sont covariants. Cela signifie que String[] est un sous-type de Object[].
Méthod Overriding
Dans le remplacement de méthode, la covariance s'applique aux types de retour et la contravariance s'applique aux types de paramètres. Autrement dit, si une sous-classe remplace une méthode de la superclasse, le type de retour peut être covariant (un sous-type du type de retour de la méthode de la superclasse) et les types de paramètres peuvent être contravariants (les supertypes des types de paramètres de la méthode de la superclasse).
En conclusion, la covariance, l'invariance et la contravariance décrivent comment les relations de typage se comportent sous différentes transformations, telles que les conversions de types, le remplacement de méthode ou l'héritage. Comprendre ces concepts peut aider les programmeurs à écrire du code plus flexible et extensible.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!