繁体   English   中英

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

[英]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);

谢谢

因为编译器只知道aIA的实例。 过载在基于编译时间类型所涉及的表达式的编译时确定的,并且在编译时间类型aIA

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

这条线

 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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM