一个类实现两个接口。方法属于哪个接口?

时间:2013-11-18 10:16:32

标签: java interface

有两个接口BC各自具有相同的方法public m1()

class A implements B and C 

如果类A必须实现方法m1(),那么实现的方法将是哪个接口?

6 个答案:

答案 0 :(得分:7)

我认为我们可以说A.m1实现了B.m1和C.m1。因为两者

B b = new A();
b.m1();

C c = new A();
c.m1();

将起作用

答案 1 :(得分:3)

这是一个常见问题,这就是为什么拥有明确的教学方法名称很重要。良好的OOP设计将使相同的方法成为抽象的。

这也是事情被分离出来的原因。

Animal.eat()

Fish extends Animal
    Fish.eat()
Dog extends Animal
    Dog.eat()

答案 2 :(得分:2)

接口没有方法体,所以实现哪种方法几乎不重要

请参阅以下示例

package test;
public class a implements i,j{

    @Override
    public void run() {
        // TODO Auto-generated method stub

    }

}
package test;

public interface i {
public void run();
}
package test;

public interface j {
public void run();
}

在课程arun()被覆盖但是如果它来自界面i或j则重要

答案 3 :(得分:1)

由于接口没有实现,因此无关紧要。这里没有致命的死亡钻石类型的问题。

答案 4 :(得分:1)

您只需添加一个公共m1()方法。这将是两个接口。如果两个接口都具有相同的参数,则方法声明将为public m1()。

答案 5 :(得分:1)

只要B和C中的m1声明是“兼容的”,即具有相同的返回值,就没有问题。

E.g。

    public interface B {
    void doit();
}

public interface C {
    void doit();
}

public class A implements B, C {

    @Override
    public void doit() {
        // TODO Auto-generated method stub

    }
}

但是如果返回类型不同,则不清楚要调用哪个,这将导致编译错误,如“返回类型与B.doit()不兼容”