在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)

请注意,这与重载不同,在重载中,重要的是目标对象的执行时间类型。

09-11 19:12
查看更多