但是,如果我将 f(object) 更改为 f(String) 或 f(Integer),则以下代码无法编译。我已经阅读了有关该主题的其他帖子,但我仍然不明白,编译器为什么不知道使用哪种方法(如果是新实例 A a = new B();)
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 中的函数?(类型擦除后两者具有相同的签名