[英]Java Overload method with inherited interface
我试图了解java的行为。 使用此接口:
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
。
(将此与覆盖进行比较,其中在执行时根据所涉及的实际类型选择方法实现。)
这条线
IA a = new myClass();
将对象a定义为类型IA,这是编译器所知道的。 它不能假设a也是IB,因为它完全可能是真的:
public class MyClass2 implements IA{}
IA a = new MyClass2();
method(a);
在这种情况下,a不是你的例子中的IB。 因此,除了您提供的类型之外,编译器不会对类型进行任何假设。 所以它必须调用接受IA的方法。
因为你传递“a”,这是一个IA论证。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.