【问题标题】:Error: "class must implement abstract method X", but it already does错误:“类必须实现抽象方法 X”,但它已经实现了
【发布时间】:2015-11-04 10:57:33
【问题描述】:

我有这个抽象超类:

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报错

“VideoListActivity”类必须声明为抽象类或在“MediaListActivity”中实现抽象方法“launchMedia(MediaFile)”

我明白为什么应该这样做。但确实如此!不是吗?我检查了签名是否匹配;我试过 Option+Return 让 IDE 提出修复建议;没有任何效果。

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

现在恰好这些类位于不同的包中:子类 VideoListActivity 位于“子包”foo.bar.baz.video 中,而超类 MediaListActivity 位于包 foo.bar.baz 中。

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

【问题讨论】:

  • 这将是一个很好的 Java 面试问题。
  • @VinayWadhwa:我想我在那次采访中表现不佳。 :-) 另一方面,我认为这代表了 IntelliJ IDEA 改进其手持错误消息的机会。并不是说这可以替代程序员了解类的工作原理。

标签: java android abstract-class packages


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 2015-06-29
    • 1970-01-01
    • 1970-01-01
    • 2015-02-28
    • 2013-06-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多