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