Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/395.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/perl/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 一个类实现两个接口。方法属于哪个接口?_Java_Interface - Fatal编程技术网

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

    }
}