我有一个接口和一个抽象类:
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
为什么会这样?
答案 0 :(得分:8)
您定义了在presents()
界面中返回int
的方法Gift
。
然后,您尝试在名为presents()
的类中重新定义返回类型为void
的方法myClass
。
很明显int
不是void
。这意味着返回类型不兼容。
您对方法继承感到困惑。问题是java(和所有类c语言)的语法没有规定返回值的使用,所以即使你的方法返回int
,你仍然可以像下面这样调用它:
presents();
因此,假设编译器允许您有两个名为presents()
的不同方法:一个返回int
,另一个返回void
。编译器如何理解我们的示例中使用哪种方法?答案是没办法的。这就是您可以使用不同的参数签名覆盖方法的原因,例如
presents();
presents(String str);
presents(int n);
但是,您不能拥有2个具有相同参数签名和不同返回类型的方法。
答案 1 :(得分:4)
在界面中,presents
被定义为返回int
,但在您声明要实现界面的类中,它是void
。两者需要匹配。
答案 2 :(得分:3)
因为接口具有方法presents()
,并且您正尝试在此处更改方法签名。
如果您不希望该方法编写新方法。
abstract void anotherPresents();
或
满足原始签名
abstract int presents();