【问题标题】:Two interfaces with same method name, what happens when I override?两个具有相同方法名称的接口,当我覆盖时会发生什么?
【发布时间】:2014-11-26 13:37:24
【问题描述】:

所以我有一个类“MyClass”和两个接口“A”和“B”

public class MyClass implements A, B {

    @Override
    public void mymethod(){
        System.out.println("hello world");
    }

}

...

public interface A {
    void mymethod();
}

...

public interface B {
    void mymethod();
}

这里哪个接口的哪个方法被覆盖了?

我认为两者都是?

谢谢 (学生)

【问题讨论】:

标签: java interface overriding


【解决方案1】:

在这种情况下,就像只有一种方法一样。在这种情况下,它将覆盖“两种”方法,因为它们具有完全相同的签名。如果这些方法有不同的签名(返回类型或其他东西),那么就会有问题。看看这个答案here

例如:

public class MyClass implements A, B {

    @Override
    public void mymethod(){
        System.out.println("hello world");
    }

}
...

public interface A {
    void mymethod();
}
...

public interface B {
    String mymethod();
}

这会导致问题...

【讨论】:

    【解决方案2】:

    因为它符合两个接口,所以会是两者。

    【讨论】:

      【解决方案3】:
      ((A)(new MyClass())).mymethod();
      ((B)(new MyClass())).mymethod();
      

      输出

      hello world
      hello world
      

      测试可能会发生什么很简单。

      如果您遇到这种情况,则 A 和 B 之间可能存在一些共同特征,这些特征可能被抽象为 A 和 B 都扩展的另一个接口,或者它们之间存在不合需要的共享术语导致重叠,并且可能需要重命名。

      【讨论】:

        【解决方案4】:

        接口只是一个契约。

        实现A意味着MyClass应该有一个方法void mymethod()

        实现 B 意味着 MyClass 应该有一个方法 void mymethod()

        它覆盖了“两者”,但我不确定这是一种正确的说法。

        这只是关于填写合同并确保 MyClass 具有正确的方法。

        【讨论】:

        • 您不是在覆盖这些方法,而是在实现它们。
        猜你喜欢
        • 1970-01-01
        • 2017-01-19
        • 2011-03-14
        • 1970-01-01
        • 1970-01-01
        • 2015-04-04
        • 2018-11-04
        • 2013-01-19
        • 2011-07-26
        相关资源
        最近更新 更多