Java的重载方法具有继承接口(Java Overload method with inherite

2019-08-31 05:56发布

我试图了解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);

谢谢

Answer 1:

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

(具有压倒一切的,其中,所述方法实现被选择在基于所涉及的实际类型的执行时间进行比较。)



Answer 2:

该生产线

 IA a = new myClass();

定义该对象的类型IA,这是所有编译器知道。 它不能假定也是IB,因为它是完全有可能这是真的:

 public class MyClass2 implements IA{}

 IA a = new MyClass2();
 method(a);

在这种情况下是不是IB作为你的榜样。 因此,编译器不作任何比你提供什么其他类型的假设。 因此,它必须调用接受IA的方法。



Answer 3:

由于您所传递的“a”,至极是IA的说法。



文章来源: Java Overload method with inherited interface