如果某些情況下,如要繼承一個(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 {
}