0
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版本,即使在编译和运行时都属于类。为什么会这样?fooAkB

4

0 回答 0