我正在尝试了解 Java 行为。使用这个接口(interface):
public interface IA {}
public interface IB extends IA {}
public class myClass implements IB {}
我正在重载这样的方法:
public void method(IA a);
public void method(IB b);
使用以下对象调用方法时:
IA a = new myClass();
method(a);
为什么java要用:
public void method(IA a);
代替
public void method(IB b);
?
谢谢
最佳答案
因为编译器只知道a
是IA
的实例。重载是在编译时根据所涉及的表达式的编译时类型确定的,a
的编译时类型是IA
。
(将此与重写进行比较,重写在执行时根据涉及的实际类型选择方法实现。)
关于具有继承接口(interface)的Java重载方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1601365/