簡體   English   中英

如何覆蓋抽象內部類的方法?

[英]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方法。 如果不是,則無法看到 AbstractInnerrun()聲明,因此無法覆蓋它。 相反,您正在聲明具有相同簽名的新方法。

如果您在AbstractInner (以及因此也在Inner )中使run()受保護(或公共)而不是使用默認可見性,它將按預期工作。

回想一下,只有在接口中聲明的方法是隱式public 在抽象類中,它們是隱式包私有的。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM