由於內部類構建器必須同封裝類對象的一個句柄聯系到一起,所以從一個內部類繼承的時候,情況會稍微變得有些復雜。這兒的問題是封裝類的“秘密”句柄必須獲得初始化,而且在衍生類中不再有一個默認的對象可以連接。解決這個問題的辦法是采用一種特殊的語法,明確建立這種關聯:
//: InheritInner.java
// Inheriting an inner class
class WithInner {
class Inner {}
}
public class InheritInner
extends WithInner.Inner {
//! InheritInner() {} // Won't compile
InheritInner(WithInner wi) {
wi.super();
}
public static void main(String[] args) {
WithInner wi = new WithInner();
InheritInner ii = new InheritInner(wi);
}
} ///:~
從中可以看到,InheritInner只對內部類進行了擴展,沒有擴展外部類。但在需要創建一個構建器的時候,默認對象已經沒有意義,我們不能只是傳遞封裝對象的一個句柄。此外,必須在構建器中采用下述語法:
enclosingClassHandle.super();
它提供了必要的句柄,以便程序正確編譯。