-4

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

interface MyInterface {int presents();};

public abstract class MyAbstractClass implements MyInterface {
    abstract void presents();
    abstract void chill();
}

编译器抱怨在

abstract void presents();

返回类型不兼容

MyInterface.presents()

提供以下选项:

make it int type
make MyInterface.presents void type

为什么会这样?

4

3 回答 3

8

您定义了在接口presents()中返回的方法。然后,您尝试在名为的类中重新定义具有返回类型的方法。intGiftpresents()voidmyClass

很明显int不是void。这意味着返回类型不兼容。

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

presents();

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

presents();
presents(String str);
presents(int n);

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

于 2013-10-14T08:10:48.407 回答
4

在接口中,presents定义为返回一个int,但在您声称实现该接口的类中,它是void. 两者需要匹配。

于 2013-10-14T08:05:34.970 回答
3

因为接口具有该方法presents() ,并且您正在尝试在此处更改方法签名。

如果您不想要该方法,请编写新方法。

 abstract void anotherPresents();

或者

满足原签名

   abstract int presents();
于 2013-10-14T08:06:09.583 回答