java - 错误 : "class must implement abstract method X", 但它已经发生了

标签 java android abstract-class package

我有这个抽象父类(super class):

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' must either be declared abstract or implement abstract method 'launchMedia(MediaFile)' in 'MediaListActivity'

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

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

现在碰巧这些类在不同的包中:子类 VideoListActivity 在“子包”foo.bar.baz.video 中,而父类(super class) MediaListActivity 在包 中>foo.bar.baz.

如果我将 VideoListActivity 向上移动到 foo.bar.baz 包中,错误就会消失。但是我有几个这样的具体子类,我不想用它们弄乱顶级包:我喜欢将它们组织到它们的子包中。我该怎么做才能消除此错误(假设它甚至是必要的)?

最佳答案

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

关于java - 错误 : "class must implement abstract method X", 但它已经发生了,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31954950/

相关文章:

java - "Warning: Do not place Android context classes in static fields; this is a memory leak (and also breaks Instant Run)"

android - 通过 JSON 从 Android 到 ASP.NET 网络服务的用户定义对象列表

java - 发出 SOAP 请求时出现 401 错误未经授权

java - 如何通过上下文菜单从 SQLite 数据库中删除项目?

java - 失败 - 上下文路径/MyProject 中的应用程序无法启动(JndiException 和 NameNotFoundException)

java - 调用类的方法时 "used"是什么意思

android - 无法在 Eclipse 中启动 AVD 模拟器

f# - 如何在F#中实现抽象类?

c# - 从基类创建派生类的实例

.net 抽象类的多重继承