Почему контравариантные типы параметров в Java не допускаются для переопределения?
При переопределении метода суперкласса Java допускает, чтобы возвращаемый тип был ковариантным.
Почему контравариантные типы параметров в контрасте не разрешены при переопределении методов?
Ответ 1
Потому что это называется перегрузкой .
В частности, тип возвращаемого типа может быть ковариантным, поскольку он не учитывается при перегрузке и, следовательно, по-прежнему соответствует реализации суперкласса или интерфейса. При перегрузке учитываются параметры. У вас может быть оптимизация с Number doSomethingWithNumber(Integer value) по сравнению с Number doSomethingWithNumber(Number value).