Следующий код не скомпилируется, если я изменяю f (объект) на f (String) или f (Integer), который он компилирует. Я прочитал другие сообщения о предмете, но я до сих пор не понимаю, почему компилятор не знает, какой метод использовать (в случае нового экземпляра A a = new B();)Почему методы переопределения не задают параметр типа, если метод overriden не поддерживает?
public class SampleTester {
public static class A {
public void f(int x) { System.out.print("1"); }
public void f(Object x) { System.out.print("2"); }
}
public static class B extends A {
public <T> void f(T x) { System.out.print("3"); } //compiler error
}
public static void main(String[] args) {
A a = new A();
B b= new B();
a.f(3);
a.f("foo");
b.f(3);
b.f("foo");
}
}
Если изменить T x
к Object t
это еще не компилируется, так какая разница? и, кроме того, почему он не просто переопределяет функцию из A? . (Оба имеет ту же подпись после типа стирания
Я не уверен, почему этот вопрос был опущен. Это, похоже, довольно хороший вопрос ИМО. – CKing
Пока я не спускал вниз, явным вопросом был бы «Так что сообщение об ошибке?» * Любой * вопрос, говорящий о том, что что-то не компилирует (или компилирует, а генерирует исключение), должно содержать сведения об ошибке. –