两个具有相同方法名称的接口,当我覆盖时会发生什么?

时间:2014-11-26 13:37:25

标签: java interface method-overriding

所以我有一个班级'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();
}

从这个界面覆盖什么方法被覆盖?

我认为两者都是?

由于 (学生)

4 个答案:

答案 0 :(得分:2)

在这种情况下,它就像只有一种方法。在这种情况下,它将覆盖“两个”方法,因为它们具有完全相同的签名。如果方法有不同的签名(返回类型或某些东西),那么就会出现问题。看看这个答案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();
}

这会导致问题...

答案 1 :(得分:1)

这既是因为它符合两个接口。

答案 2 :(得分:1)

((A)(new MyClass())).mymethod();
((B)(new MyClass())).mymethod();

输出

hello world
hello world

可以直接测试可以发生的事情。

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

答案 3 :(得分:0)

界面只是一份合同。

实施方法MyClass应该有方法void mymethod()

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

它超越了“两者”,但我不确定这是说出来的正确方法。

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