错误:"类必须实现抽象方法X",但它已经实现了

时间:2015-08-12 02:11:43

标签: java android abstract-class packages

我有这个抽象的超类:

public abstract class MediaListActivity extends Activity {
    ...
    abstract void launchMedia(MediaFile mediaFile);
}

和具体的子类:

public class VideoListActivity extends MediaListActivity {
    ...
    void launchMedia(MediaFile mediaFile) {
        // TODO: implement launchMedia()
    }
}

在VideoListActivity子类的第一行,Android Studio提供了错误

  

Class' VideoListActivity'必须被宣布为抽象的或实现抽象方法" launchMedia(MediaFile)'在' MediaListActivity'

我明白为什么会这样。但确实如此!不是吗?我检查过签名是否匹配;我已经尝试过Option + Return来让IDE建议修复;什么都行不通。

这只是Android Studio的一个错误吗?或者我做错了什么?

现在碰巧这些类在不同的包中:子类VideoListActivity位于"子包中," foo.bar.baz.video,而超类MediaListActivity位于包foo.bar.baz

如果我将VideoListActivity移到foo.bar.baz包中,错误就会消失。但是我有几个这些具体的子类,我不想把它们与顶级包混为一谈:我喜欢它们组织成它们的子包。我该怎么做才能使这个错误消失(假设它甚至是必要的)?

1 个答案:

答案 0 :(得分:2)

答案是确保方法launchMedia()的实现可以在其包之外访问:即它必须是protectedpublic。我以为我已经尝试过了,但我可能一直在寻找错误的方法。无论如何,这会使错误消失。