-1

我有一个我想实现的接口,看起来像这样,但是有更多的方法。例如,这里只有一个:

public interface List{

public void add(int position, Album album);

}

然后我的实现它的类是这样开始的,包括接口中存在的所有方法:

public class SongList implements List{

public void add(int position, Album album){
...my code for this method
}

我的编译器告诉我两个错误。第一个 - 在编译我的 List 接口时 - 说接口 List 找不到我的 Song 类:

List.java:23: error: cannot find symbol
public void add(int position, Song item);
                            ^
symbol:   class Song
location: interface List
1 error

我有一个可以编译的歌曲类,它与界面和所有其他 java 文件位于同一文件夹中。
第二 - 编译 SongList 时 - 编译器说我没有覆盖 add() 方法:

SongList is not abstract and does not override abstract method add(int,Object) in List
public class SongList implements List{
       ^
1 error

我在这里很迷茫……据我搜索,我遵循接口的所有规则,但显然不是。任何想法我做错了什么?

4

3 回答 3

1

第一个和第二个代码块表明 add 方法需要一个 Album,但第三个和第四个代码块表明您已经使用 Song 参数实现了 add 方法。接口需要一个需要 Song 的 add 方法,或者您的类需要实现一个需要 Album 的 add 方法——这些方法需要相同的参数。

于 2013-04-10T03:08:11.887 回答
1

我认为您正在导入错误的 List 接口。

请检查导入语句中是否提到了您的 List 接口,并且没有其他 List 接口被导入,如错误语句所述。

添加(整数,对象)

并不是

添加(整数,专辑)

我认为您不小心实现了 java 列表接口

我希望这是有帮助的..

于 2013-04-10T03:43:59.477 回答
0

对于您的第一个问题,显然编译器无法定位 Song.class。如果 Song.java 在同一目录下,请确保已编译。

对于第二个问题,实现一个接口意味着你必须实现它的每一个方法。这意味着您需要编写具有完全相同的方法签名的方法 - 其中包括参数。

虽然这一次,由于您没有在界面中包含所有方法,我只是假设它们都已实现。在这种情况下,看起来 R.daneel.olivaw 是正确的,您可能使用了错误的列表。确保签名匹配,并且正在使用您的 List 版本。如上所述,这意味着它必须被编译并位于 java 的类路径(或在同一目录中)。

编辑:最初误解了问题的第二部分,此答案已相应更新。

于 2013-04-10T03:13:47.693 回答