wi.super(),也就相当于new WithInner()吧!
也就是你上面提到的:“指向outer class对象”的那个神秘reference必须被初始化;因为InheritInner extends WithInner.Inner ,你可以这样理解:
把InheritInner 看作是WithInner的内部类(这说法可能不对),
在new InheritInner()之前自然也要new WithInner()了。以上只是个人看法,仅供参考,这种情况不常见。

解决方案 »

  1.   

    Inner內部類實際上有一個對外部類的引用﹐
    你用這個
    (WithInner)this
    應可以訪問WithInner的類成員,如下
    class WithInner{
      private int a;
        class Inner{
          changeOuterValue(){
            (WithInner).this.a = 0;
          } 
        }
    }
    非靜態內部類都有這個引用﹐所以在繼承時﹐必須也要提供這個引用。
    不知我這樣講你清楚了沒有?
      

  2.   

    sorry!!!sorry!!!sorry!!!
    刚才做了一下测试,我上面所说的要全部否定了;
    测试例子
    class WithInner {
    WithInner() { System.out.println("WithInner()"); }
    WithInner(int i) { System.out.println("WithInner1()"); }
        class Inner{
    Inner() {
    System.out.println("Inner()"); 
    }
    Inner(int i) {
    System.out.println("Inner1()"); 
    }
    }
    }public class InheritInner extends WithInner.Inner {
        InheritInner(WithInner wi) {
            wi.super();         //---这里不懂,wi.super()指的是什么,有什么用?
    System.out.println("InheritInner()");
        }
        public static void main(String[] args) {
            WithInner wi = new WithInner(1);
            InheritInner ii = new InheritInner(wi);
        }
    }结果出乎预料:
    WithInner1()
    Inner()
    InheritInner()wi.super()竟然是调用了Inner(),
    把wi.super()改为wi.super(1),调用的是Inner(int),
    还要仔细想想先         
      

  3.   

    哦我搞清楚了,原来Inner才是InheritInner的父类(刚才看走眼了)
    并且Inner又是WithInner内部类,必须通过
    outerObject(也就是wi)来引用super()
      

  4.   

    很高兴(虚荣心与星星)终于搞清楚了,就是这么回事,因为如果是普通的类
    你直接super()就可以在子类中给它初始化了,而恰恰这个类是一个内部类,
    所以要想找到它当然要先找到它是哪个类的内部类。所以就出现了上面的情
    况。
      

  5.   

    to zhh200308(虚荣心与星星):
    谢谢你的理解与例子,我现在基本上懂了。super指的是当前继承类的基类。super()是指那个基类的初始化。wi.super()指的应该是new WithInner.Inner(),它完成了对基类的初始化。这样说对吗?to   storm999(飛魚) & cd1860(守莲小子) :
    谢谢你们的提示,终于让我懂了这个例子。不过storm999,你给出的那个代码中(WithInner).this.a = 0;
    是不是应该为WithInner.this.a=0;?
      

  6.   

    谢谢你的理解与例子,我现在基本上懂了。super指的是当前继承类的基类。super()是指那个基类的初始化。wi.super()指的应该是new WithInner.Inner(),它完成了对基类的初始化。这样说对吗
    ---------------------------------------------------
    Ok。我第一次看时把“InheritInner extends WithInner.Inner”
    看成了"InheritInner extends WithInner"所以造成误解,
    所以我第一贴的理解完全错了。
    谢谢你们的提示,终于让我懂了这个例子。不过storm999,你给出的那个代码中(WithInner).this.a = 0;
    是不是应该为WithInner.this.a=0;?
    ----------------------------------------
    正确格式应该是WithInner.this.a=0;
    我刚刚复习了一下<<core java 2>>,在第222页计到了。