La covariance, la contravariance et l'invariance décrivent comment la hiérarchie d'héritage de type existante change lorsqu'elle est soumise à une certaine transformation (comme l'utilisation dans les génériques). Si la transformation conserve l'ordre de la hiérarchie d'origine, elle est "covariante". S'il l'inverse, il est «contravariant». S'il le casse, il est "invariant".