由于内部类构建器必须同封装类对象的一个句柄联系到一起所以从一个内部类继承的时候情况会稍微变得有些复杂这儿的问题是封装类的秘密句柄必须获得初始化而且在衍生类中不再有一个默认的对象可以连接解决这个问题的办法是采用一种特殊的语法明确建立这种关联 //: InheritInnerjava // Inheriting an inner class class WithInner { class Inner {} } public class InheritInner extends WithInnerInner { //! InheritInner() {} // Wont compile InheritInner(WithInner wi) { wisuper(); } public static void main(String[] args) { WithInner wi = new WithInner(); InheritInner ii = new InheritInner(wi); } } ///:~ 从中可以看到InheritInner只对内部类进行了扩展没有扩展外部类但在需要创建一个构建器的时候默认对象已经没有意义我们不能只是传递封装对象的一个句柄此外必须在构建器中采用下述语法 enclosingClassHandlesuper(); 它提供了必要的句柄以便程序正确编译 |