Error: "class must implement abstract method X", but it already does
Error: "class must implement abstract method X", but it already does
我有这个抽象超类:
public abstract class MediaListActivity extends Activity {
...
abstract void launchMedia(MediaFile mediaFile);
}
和具体子类:
public class VideoListActivity extends MediaListActivity {
...
void launchMedia(MediaFile mediaFile) {
// TODO: implement launchMedia()
}
}
在VideoListActivity子类的第一行,AndroidStudio报错
Class 'VideoListActivity' must either be declared abstract or implement abstract method 'launchMedia(MediaFile)' in 'MediaListActivity'
我明白为什么会这样。但确实如此!不是吗?我检查过签名是否匹配;我试过 Option+Return 让 IDE 提出修复建议;没有任何效果。
这只是 Android 工作室的失误吗?还是我做错了什么?
现在碰巧 类 在不同的包中:子类 VideoListActivity 在 "sub-package," foo.bar.baz.video
中,而超类 MediaListActivity 在包 foo.bar.baz
中。
如果我将 VideoListActivity 移到 foo.bar.baz
包中,错误就会消失。但是我有几个这样的具体子类,我不想用它们弄乱顶级包:我喜欢将它们组织到它们的子包中。我能做些什么来消除这个错误(假设它是必要的)?
答案是确保方法 launchMedia()
的实现可以在其包外访问:即它必须是 protected
或 public
。我以为我已经尝试过了,但我可能一直在寻找错误的方法。无论如何,这会使错误消失。
我有这个抽象超类:
public abstract class MediaListActivity extends Activity {
...
abstract void launchMedia(MediaFile mediaFile);
}
和具体子类:
public class VideoListActivity extends MediaListActivity {
...
void launchMedia(MediaFile mediaFile) {
// TODO: implement launchMedia()
}
}
在VideoListActivity子类的第一行,AndroidStudio报错
Class 'VideoListActivity' must either be declared abstract or implement abstract method 'launchMedia(MediaFile)' in 'MediaListActivity'
我明白为什么会这样。但确实如此!不是吗?我检查过签名是否匹配;我试过 Option+Return 让 IDE 提出修复建议;没有任何效果。
这只是 Android 工作室的失误吗?还是我做错了什么?
现在碰巧 类 在不同的包中:子类 VideoListActivity 在 "sub-package," foo.bar.baz.video
中,而超类 MediaListActivity 在包 foo.bar.baz
中。
如果我将 VideoListActivity 移到 foo.bar.baz
包中,错误就会消失。但是我有几个这样的具体子类,我不想用它们弄乱顶级包:我喜欢将它们组织到它们的子包中。我能做些什么来消除这个错误(假设它是必要的)?
答案是确保方法 launchMedia()
的实现可以在其包外访问:即它必须是 protected
或 public
。我以为我已经尝试过了,但我可能一直在寻找错误的方法。无论如何,这会使错误消失。