在Java的同一类上给定两个方法:
public void doSomething( Person person );
public void doSomething( Employee employee );
在哪里
Employee extends Person
如果我调用:
doSomething( employee )
我发现
doSomething( Person )
被调用了。我曾期望调用最接近的匹配协定而不是最抽象的过载(这就是我所发现的)
有人可以解释为什么吗?
最佳答案
使用了最特定的适用重载-但该重载是在编译时根据employee
变量的编译时类型确定的。
换一种说法:
Employee employee = new Employee();
doSomething(employee); // Calls doSomething(Employee)
但:
Person employee = new Employee();
doSomething(employee); // Calls doSomething(Person)
请注意,这与重载不同,在重载中,重要的是目标对象的执行时间类型。