给出了Java中同一个类的两个方法:
public void doSomething( Person person );
public void doSomething( Employee employee );
Run Code Online (Sandbox Code Playgroud)
哪里
Employee extends Person
Run Code Online (Sandbox Code Playgroud)
如果我打电话:
doSomething( employee )
Run Code Online (Sandbox Code Playgroud)
我发现它doSomething( Person )被调用了.
我原本期望调用最接近的匹配合约的重载,而不是最抽象的(这是我发现的)
有人能解释为什么吗?
Jon*_*eet 13
最具体的适用超载使用-但是,过载确定在编译 -time,基于所述的编译时间类型employee变量.
换一种说法:
Employee employee = new Employee();
doSomething(employee); // Calls doSomething(Employee)
Run Code Online (Sandbox Code Playgroud)
但:
Person employee = new Employee();
doSomething(employee); // Calls doSomething(Person)
Run Code Online (Sandbox Code Playgroud)
请注意,这与覆盖目标对象的执行时间类型(重要)不同.
| 归档时间: |
|
| 查看次数: |
1598 次 |
| 最近记录: |