Я пробовал следующий пример:
class BaseClass {
public void methodA(Class<?> cl) {
System.out.println("Base.methodA()");
}
}
class SubClass extends BaseClass {
public void methodA(Class cl) {
System.out.println("Sub.methodA()");
}
}
public class OverrideEx {
public static void main(String[] args) {
BaseClass b = new BaseClass();
BaseClass s = new SubClass();
b.methodA(Class.class);
s.methodA(Class.class);
}
}
Выход:
Base.methodA ()
Sub.methodA ()
Но если я перехожу на аргумент метода верховой езды, то наоборот:
class BaseClass {
public void methodA(Class cl) {
System.out.println("Base.methodA()");
}
}
class SubClass extends BaseClass {
public void methodA(Class<?> cl) {
System.out.println("Sub.methodA()");
}
}
public class OverrideEx {
public static void main(String[] args) {
BaseClass b = new BaseClass();
BaseClass s = new SubClass();
b.methodA(Class.class);
s.methodA(Class.class);
}
}
Я получаю ошибку компиляции. В нем говорится: «Столкновение с именем: метод methodA (Class) типа SubClass имеет такое же стирание, что и methodA (Class) типа BaseClass, но не переопределяет его».
Почему это?