wi.super(),也就相当于new WithInner()吧!
也就是你上面提到的:“指向outer class对象”的那个神秘reference必须被初始化;因为InheritInner extends WithInner.Inner ,你可以这样理解:
把InheritInner 看作是WithInner的内部类(这说法可能不对),
在new InheritInner()之前自然也要new WithInner()了。以上只是个人看法,仅供参考,这种情况不常见。
也就是你上面提到的:“指向outer class对象”的那个神秘reference必须被初始化;因为InheritInner extends WithInner.Inner ,你可以这样理解:
把InheritInner 看作是WithInner的内部类(这说法可能不对),
在new InheritInner()之前自然也要new WithInner()了。以上只是个人看法,仅供参考,这种情况不常见。
解决方案 »
- Java Word PDF PPT 读写
- jxl设置某一行单元格格式
- jtable组件连数据库问题
- java 输入框
- 如何获得java.util.concurrent包下线程池的负荷状态.
- 实现取服务器上的时间
- 问大家一个非技术的问题:北京和上海那的开发坏境好一些,生活环境好一些,选择去上海还是北京?
- how to use the statement"reurn'in java?
- 有些题目请教。
- 请问一下jbuilder里面的jpr和jpx有什么区别??谁告诉我呀??
- 初学jbiulder的一个问题
- public String getA() throws Exception中的throws Exception表示什么意思?
你用這個
(WithInner)this
應可以訪問WithInner的類成員,如下
class WithInner{
private int a;
class Inner{
changeOuterValue(){
(WithInner).this.a = 0;
}
}
}
非靜態內部類都有這個引用﹐所以在繼承時﹐必須也要提供這個引用。
不知我這樣講你清楚了沒有?
刚才做了一下测试,我上面所说的要全部否定了;
测试例子
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),
还要仔细想想先
并且Inner又是WithInner内部类,必须通过
outerObject(也就是wi)来引用super()
你直接super()就可以在子类中给它初始化了,而恰恰这个类是一个内部类,
所以要想找到它当然要先找到它是哪个类的内部类。所以就出现了上面的情
况。
谢谢你的理解与例子,我现在基本上懂了。super指的是当前继承类的基类。super()是指那个基类的初始化。wi.super()指的应该是new WithInner.Inner(),它完成了对基类的初始化。这样说对吗?to storm999(飛魚) & cd1860(守莲小子) :
谢谢你们的提示,终于让我懂了这个例子。不过storm999,你给出的那个代码中(WithInner).this.a = 0;
是不是应该为WithInner.this.a=0;?
---------------------------------------------------
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页计到了。