[英]java - reflection: How to Override private static abstract inner class method?
[英]How do I override a method of an Abstract Inner Class?
我的代碼是:
核心/ Base.java
package core;
public class Base {
public abstract class AbstractInner {
abstract void run();
}
}
Test.java
class Test extends core.Base {
class Inner extends AbstractInner {
void run() {}
}
}
javac抱怨如下;
shell> javac -cp . Test.java
Test.java:2: Test.Inner is not abstract and does not override abstract method run() in core.Base.AbstractInner
class Inner extends AbstractInner {
^
我的錯是什么?
如果Base與Test位於同一個包中,則編譯成功。 我不知道為什么。
有一些非直觀的規則管理包私有成員的可覆蓋性。 實際上,如果重寫類位於同一個包中,則可以覆蓋package-private方法。 如果不是,則無法看到 AbstractInner
的run()
聲明,因此無法覆蓋它。 相反,您正在聲明具有相同簽名的新方法。
如果您在AbstractInner
(以及因此也在Inner
)中使run()
受保護(或公共)而不是使用默認可見性,它將按預期工作。
回想一下,只有在接口中聲明的方法是隱式public
。 在抽象類中,它們是隱式包私有的。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.