使用接口和抽象类编译错误

Use*_*590 -4 java

我有一个接口和一个抽象类:

interface MyInterface {int presents();};

public abstract class MyAbstractClass implements MyInterface {
    abstract void presents();
    abstract void chill();
}
Run Code Online (Sandbox Code Playgroud)

编译器抱怨说

abstract void presents();
Run Code Online (Sandbox Code Playgroud)

返回类型与.不兼容

MyInterface.presents()
Run Code Online (Sandbox Code Playgroud)

提供以下选项:

make it int type
make MyInterface.presents void type
Run Code Online (Sandbox Code Playgroud)

为什么会这样?

Ale*_*exR 8

您定义presents()intGift接口中返回的方法.然后尝试在名为class的类中重新定义presents()返回类型的方法.voidmyClass

很明显,事实int并非如此void.这意味着返回类型不兼容.

您对方法继承感到困惑.问题是java(和所有类c语言)的语法没有规定返回值的使用,所以即使你返回方法,int你仍然可以像下面这样调用它:

presents();

因此,假设编译器允许您有两个不同的方法presents():一个返回int,另一个返回void.编译器如何理解我们的示例中使用哪种方法?答案是没办法的.这就是您可以使用不同参数签名覆盖方法的原因,例如

presents();
presents(String str);
presents(int n);
Run Code Online (Sandbox Code Playgroud)

但是,您不能使用具有相同参数签名和不同返回类型的2个方法.