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