请问:
class WithInner
{
class Inner
{}
}
class InheritIneer extends WithInner.Inner

  InheritIneer(WithInner w1)
  {
    // InheritIneer(){}不能编译
     w1.super();
  } 
  public static void main(String[]args)
  {
    WithInner w1 = new WithInner();
    InheritIneer w2 = new InheritIneer(w1);
  }
}w1.super() 调用的是WithInner父类的构造方法啊 而实际上是要调用WithInner的构造方法啊
我认为应该使用Inner对象的super才对啊

解决方案 »

  1.   

    这种构造比较特殊 因为InheritInner继承的是别类的内部类
    所以在构造InheritInner之前 必须要有一个WithInner类的实例化对象才行
    w1.super()的调用就是完成了因为中间构造器调用所需的enclosing instance的实例化
    语法格式是这样的 试着去掉或者改成w1 = new WithInner();就会发现了
      

  2.   

    由于inner class的构造函数必须连接到一个reference指向outer class对象身上,所以当你继承inner class时,事情便稍微复杂些。问题出在“指向outer class对象”的那个神秘的reference必须被初始化,但derived class之内不存有可连接的缺省对象。这个问题的答案是,使用专用语法,明确产生关联性: 
    class WithInner{ 
        class Inner{} 
    } public class IneritInner extends WithInner.Inner{ 
        //!InheritInner(){} //Won’t compile 
        InheritInner (WithInner wi) { 
            wi.super(); 
        } 

    InheritInner继承的是inner class而非outer class。但是当编译至构造函数时,default构造函数有问题;而且你也不能够只是传入一个reference指向outer object,你还必须在构造函数中使用以下语法: 
    enclosingClassReference.super(); 
      

  3.   

    我的语文学的不好,没看懂是什么意思....
    麻烦lz把意思说清楚.
    按照我的理解, w1.super(); 这行没什么用.不知道lz想要做什么.