Контравариантность
Контравариантность — это обращение иерархии исходных типов на противоположную в производных типах.
Например, тип Строка наследуется от типа Объект, а функциональный тип (Т)->Строка определен как метод, принимающий экземпляр типа T, то (Объект)->Строка наследуется от (Число)->Строка, а не наоборот. Действительно, если «все строки — объекты», то «всякий метод, оперирующий произвольными объектами, может выполнить операцию над строкой», но не наоборот.
В таком случае говорят, что тип (Т)->Строка контравариантен своему параметру-типу T.