Java 一个类实现两个接口。方法属于哪个接口?
有两个接口Java 一个类实现两个接口。方法属于哪个接口?,java,interface,Java,Interface,有两个接口B和C都有相同的方法public m1() 如果类A必须实现方法m1(),那么实现的方法将是哪个接口?我想我们可以说A.m1同时实现了B.m1和C.m1。因为两者 B b = new A(); b.m1(); 及 这是一个常见的问题,这就是为什么清晰的教学方法名称很重要。良好的面向对象设计将使相同的方法变得抽象 这也是事物被分成不同类别的原因 Animal.eat() Fish extends Animal Fish.eat() Dog extends Animal
B
和C
都有相同的方法public m1()
如果类
A
必须实现方法m1()
,那么实现的方法将是哪个接口?我想我们可以说A.m1同时实现了B.m1和C.m1。因为两者
B b = new A();
b.m1();
及
这是一个常见的问题,这就是为什么清晰的教学方法名称很重要。良好的面向对象设计将使相同的方法变得抽象 这也是事物被分成不同类别的原因
Animal.eat()
Fish extends Animal
Fish.eat()
Dog extends Animal
Dog.eat()
因为接口没有实现,所以这无关紧要。这里没有死亡钻石之类的问题 您只需添加一个public m1()方法。这对双方都是有利的。如果两个接口具有相同的参数,则方法声明将是public m1()。接口没有方法体,因此实现哪种方法无关紧要 请参见下面的示例
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只要B和C中的m1声明是“兼容的”,即具有相同的返回值,就不会有问题
例如
但是如果返回类型不同,则不清楚要调用哪个,这将导致编译错误,如“返回类型与B.doit()不兼容”我相信您将收到一个歧义错误。:)使用简单的程序进行测试,并检查输出。这似乎是一个面试问题。看,实际上这是一个好问题+1.我问过类似的问题,但它是接口和抽象类,如何处理在两个接口中定义一个方法的问题?@arne.b它表明,在良好的设计和整个设计结构中,这种方法名称交叉将最小化。一个常见的例子是
getsause(…)
和setSauce(…)
如果没有get/set,它将只是sause(…)
,这可能意味着要么,要么两者都有。
Animal.eat()
Fish extends Animal
Fish.eat()
Dog extends Animal
Dog.eat()
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();
}
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
}
}