有两个接口B
和C
各自具有相同的方法public m1()
class A implements B and C
如果类A
必须实现方法m1()
,那么实现的方法将是哪个接口?
答案 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();
}
在课程a
中run()
被覆盖但是如果它来自界面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()不兼容”