具有继承接口的Java重载方法

use*_*877 4 java inheritance overloading interface

我试图了解java的行为.使用此接口:

public interface IA {}
public interface IB extends IA {}
public class myClass implements IB {}
Run Code Online (Sandbox Code Playgroud)

我正在重载这样的方法:

public void method(IA a);
public void method(IB b);
Run Code Online (Sandbox Code Playgroud)

使用以下对象调用方法时:

IA a = new myClass();
method(a);
Run Code Online (Sandbox Code Playgroud)

为什么java使用:

 public void method(IA a);
Run Code Online (Sandbox Code Playgroud)

代替

public void method(IB b);
Run Code Online (Sandbox Code Playgroud)

谢谢

Jon*_*eet 14

因为编译器只知道它a是一个实例IA.根据所涉及的表达式的编译时类型和编译时类型ais ,在编译时确定重载IA.

(将此与覆盖进行比较,其中在执行时根据所涉及的实际类型选择方法实现.)

  • 是的.&@paul并查看访问者模式和谷歌双重调度以获取更多相关主题. (2认同)