具有相同名称的继承方法,它是如何工作的?

Bhu*_*han 2 java interface multiple-inheritance

只是为了好奇心我试过这个:

public interface test1 {
    public Object method1(String str);
}

public interface test2 {
    public Object method1(String str);
}

public class Test implements test1, test2 {    
    public static void main(String... args) {

    }

    public Object method1(String str) {
        return new Object();
    }
}
Run Code Online (Sandbox Code Playgroud)

我期待public class Test implements test1, test2 {从Eclipse 上出现某种错误,但没有.

  1. 为什么没有编译时错误,因为方法名称有冲突?
  2. 继承了多少种方法class Test
  3. 如果上述问题的答案是2,那么我们究竟采用了哪种方法?
  4. 在运行时,为什么选择正确实现的方法?而不是另一个?
  5. 最后,有没有办法实现两者?(我几乎可以肯定答案是否定的)

我知道从设计的角度来看,这可能不会发生在现实世界的情况中,但正如我在开始时所提到的那样,它只是出现在我脑海中并且我尝试了它.

非常感谢任何澄清/参考.

Dan*_*ker 7

没有碰撞.两个接口都需要一个名为的方法method1,并且两个接口都method1在示例类中得到满足.实现接口时,根本不会继承任何方法; 你只是承诺自己实施这些方法.

有关最终问题的答案,请参阅此现有的SO问题:

Java - 接口实现中的方法名称冲突

Java 8提议允许接口指定默认实现,称为虚拟扩展方法.如果使其成为语言,则两个接口可以为同一方法签名指定不同的默认实现.如果那些接口然后由一个类实现,那么它将必须提供它自己的实现(即它将等同于两个接口都没有指定默认值) - 见3.3.冲突的默认值.