我有一个我不理解Java中的重载的行为.
这是我的代码:
interface I {}
class A implements I {}
class B {
public void test(I i) {}
public void test (A a) {}
}
Run Code Online (Sandbox Code Playgroud)
当我拨打以下电话时:
I a = new A();
b.test(a);
Run Code Online (Sandbox Code Playgroud)
我认为被调用的方法可能是test(A)
明显的test(I)
.
我不明白为什么.在运行时我的变量a
是A偶然A继承I.
因为引用类型是I,尽管你有类型A的对象.
A =新A();
将调用方法 test (A a) {}
根据JLS第15章:
在编译时选择最具体的方法; 它的描述符确定在运行时实际执行的方法.