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