2013-10-14 200 views
-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 

这是怎么发生的?

+7

编译器错误没有说足够吗? –

+2

abstract void presents();有一个返回类型的无效,而接口的present()有一个int返回类型...老兄严重吗? – Thihara

+3

现在,他正在低估所有正确的答案。 – chrylis

回答

8

你定义的方法presents()Gift接口返回int。 然后,您尝试重新定义方法presents(),返回类型void名为myClass

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

你对方法的继承感到困惑。问题是Java的语法(以及所有类似C语言),不规定返回值的使用,因此,即使你方法返回int你仍然可以调用它像以下:

presents();

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

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

然而,你不能有2个方法具有相同的参数签名和不同的返回类型。

4

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

3

因为接口的方法是presents()而且您正试图在此处更改方法签名。

如果你不想要那个方法写一个新的。

abstract void anotherPresents(); 

满足原始签名

abstract int presents();