怎么繼承一個(gè)非靜態(tài)的內(nèi)部類?

如果某些情況下,如要繼承一個(gè)內(nèi)部類,現(xiàn)實(shí)中可能不會有這種要求。
一個(gè)包含內(nèi)部類的類

class WithInner {
     class Inner {
    }
}

我們這樣直接繼承好像會有錯(cuò)誤的。

/錯(cuò)誤信息:
//Multiple markers at this line
//- No enclosing instance of type WithInner is available due to some intermediate constructor invocation
//- Breakpoint:F
public class F extends WithInner.Inner {
    
}

大概意思需要一個(gè)引用外部類WithInner 的構(gòu)造方法。我們修改如下,就能順利通過編譯。

public class F extends WithInner.Inner {
    public F(WithInner withInner) {
        withInner.super();
    }

}

實(shí)際上原理可以簡單理解為,一個(gè)非靜態(tài)內(nèi)部類的實(shí)例必須有一個(gè)外部類的引用。
如果內(nèi)部類是靜態(tài)的,其實(shí)就不需要外部類的實(shí)例了。

class WithInner {
     static class Inner {
    }
}


public class F extends WithInner.Inner {


}
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容