class HelloWorld{
public static void main(String []args){
A j = new B();
B k = new B();
System.out.println(j.foo(k));
}
}
class A {
public int foo(A p) { return 1; }
}
class B extends A {
public int foo(A p) { return 2; }
public int foo(B p) { return 3; }
}
因此打印的输出将为2.我不明白这是怎么回事。 j
对象不会被视为其编译形式:A
?然而,即使B
在编译和运行时都是foo
类,它也使用A
类型参数执行k
类B
版本。为什么会这样?