Почему нет параметра противоречия для переопределения?
C ++ и Java поддерживают ковариацию возвращаемого типа при переопределении методов.
Однако ни один не поддерживает противоречивость в типах параметров - вместо этого это приводит кпогрузка (Java) или скрытие (C ++).
Это почему? Мне кажется, что это не повредит. яМожно найдите одну причину для этого в Java - так как он все равно имеет механизм «выбрать самую конкретную версию» для перегрузки - но не может придумать ни одной причины для C ++.
Пример (Java):
class A {
public void f(String s) {...}
}
class B extends A {
public void f(Object o) {...} // Why doesn't this override A.f?
}