【问题标题】:multiple interfaces having same method that is finally implemented by class具有相同方法的多个接口最终由类实现
【发布时间】:2015-07-24 04:55:07
【问题描述】:

在面试中有两个接口 B 和 C 每个都有相同的方法 public m1() 类 A 实现 B 和 C ,如果类 A 必须实现方法 m1,实现的方法将属于哪个接口。

当时我也很迷茫,请问应该调用哪个方法

public interface A {

public void show();
}

public interface B {

public void show();
}

public class Test implements A, B {

public static void main(String[] args) {

A a;
B b;
Test t = new Test();
a = t;
a.show();
b = t;
b.show();

}

【问题讨论】:

    标签: java interface


    【解决方案1】:

    在 Java 中,两个接口重叠并且只有一种方法。不可能提供两个单独的实现(或选择您想要的实现)。如果两个接口方法定义的返回类型不兼容,则该类不能同时扩展两个接口。

    所以,a.show()b.show() 都会调用完全相同的方法。

    在 C# 中,您可以消除歧义。

    【讨论】:

      【解决方案2】:

      您必须在 Test 类中实现 show

      您将只能在 Test 类中实现一次。

      请记住,根据定义,接口不能提供show 的默认实现。

      因此,当您实例化 Test 类时,show 方法在运行时将只有一个实现。即使对象有 2 个不同的父接口,也将是相同的实现。

      【讨论】:

      • “根据定义,接口不能提供默认实现”在 Java8 中仍然如此吗?
      • 不确定的可以试试,但确实是这样(不然就是抽象类或者普通类)。
      猜你喜欢
      • 2013-07-03
      • 2014-10-25
      • 2020-10-25
      • 1970-01-01
      • 2011-07-26
      • 2020-12-09
      • 1970-01-01
      • 2013-02-18
      • 2016-05-15
      相关资源
      最近更新 更多