为什么这段代码打印的是 2.0 而不是 1.0?
abstract class B<T extends Number> {
abstract Number f(T j);
}
class A<T extends Number> extends B<T> {
public Number f(Float j) {
return 1f;
}
public Number f(T j) {
return j;
}
}
public class J {
public static void main(String[] args) {
B<Float> a = new A<>();
Number r = a.f(2f);
System.out.println(r);
}
}
最佳答案
你在期待什么。你只有一个方法在 B 类中声明:
abstract Number f(T j);
A类中的方法
public Number f(Float j);
不覆盖前者。他们有不同的签名。所以方法
public Number f(T j) {
return j;
}
被调用。
关于Java参数签名解析,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13324830/