Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/315.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 为什么案例1中的接口抛出编译时错误,但案例2中的接口编译成功_Java_Interface_Overloading - Fatal编程技术网

Java 为什么案例1中的接口抛出编译时错误,但案例2中的接口编译成功

Java 为什么案例1中的接口抛出编译时错误,但案例2中的接口编译成功,java,interface,overloading,Java,Interface,Overloading,我在“案例1”中有两个接口其中,我有一个具有不同返回类型的相同方法,并且我在另一个接口中扩展了两个接口,然后我得到了编译时错误,因为返回类型与继承的方法不兼容,但在这里,当我们在第三个接口中扩展两个接口时,方法将被重载,并且在方法中重载返回类型这种方法没有效果,那么为什么会出现这种错误呢 另外,如果我在两个接口中使用相同的方法,在“案例2”中使用相同的返回类型,并在第三个接口中扩展两个接口,那么在这里我不会得到任何错误。为什么? 案例1 Interface1.java Interface2.ja

我在“案例1”中有两个接口其中,我有一个具有不同返回类型的相同方法,并且我在另一个接口中扩展了两个接口,然后我得到了编译时错误,因为返回类型与继承的方法不兼容,但在这里,当我们在第三个接口中扩展两个接口时,方法将被重载,并且在方法中重载返回类型这种方法没有效果,那么为什么会出现这种错误呢

另外,如果我在两个接口中使用相同的方法,在“案例2”中使用相同的返回类型,并在第三个接口中扩展两个接口,那么在这里我不会得到任何错误。为什么?

案例1 Interface1.java Interface2.java Interface3.java 案例2 Interface1.java Interface2.java Interface3.java
在第一种情况下,接口不一致。任何类都不可能实现它,因为它不能满足“必须有
int m()
方法”和“必须有
void m()
方法”的约束

您说“在方法重载中,方法的返回类型没有效果”——这不完全正确。在方法重载中,返回类型不是签名的一部分。您不能仅通过更改返回类型来重载方法,因为它们具有相同的签名:

class Foo
{
    public void m() {}
    public int m() { return 1; }
}
结果:

error: method m() is already defined in class Foo
在第二种情况下,接口是一致的。完全可以实现它,只需一个方法
intm(){…}
。使用单一方法实现
I1.m
I2.m
并不是问题

public interface I3 extends I1,I2
{

}
public interface I1
{
int m();
}
public interface I2
{
int m();
}
public interface I3 extends I1,I2
{

}
class Foo
{
    public void m() {}
    public int m() { return 1; }
}
error: method m() is already defined in class Foo