我是一个Java新手,在学习<Thinking in Java>之内部类的时候,碰到这么一个例程:
class WithInner{
class Inner{
}
}class InheritInner extends WithInner.Inner{
public InheritInner(WithInner wi){
wi.super();
}
public static void main(String[] args){
WithInner wi=new WithInner();
InheritInner ii=new InheritInner(wi);
}
}
里面的wi.super();到底是什么意思呢?我在其他贴里面也看见关于内部类的问题,但是对这个问题我感觉还是没得到自己想要的答案,请各位前辈不吝赐教。
class WithInner{
class Inner{
}
}class InheritInner extends WithInner.Inner{
public InheritInner(WithInner wi){
wi.super();
}
public static void main(String[] args){
WithInner wi=new WithInner();
InheritInner ii=new InheritInner(wi);
}
}
里面的wi.super();到底是什么意思呢?我在其他贴里面也看见关于内部类的问题,但是对这个问题我感觉还是没得到自己想要的答案,请各位前辈不吝赐教。
解决方案 »
- 关于Socket的一个问题
- TabFolder里面可以再加TabFolder吗?
- 求助!Client端应用程序出错
- 各位前辈你们有没有java联接数据库的源代码?
- 又是该死不懂的基础!
- 请问如何像c++那样实现数值传递
- 求教:JDOM解析内容中有“&”字符出现就报错,如何解决??(在线等待)
- 如何使JAVA类与HTTP页面建立连接???
- -----------请问各位,有没有用JBUILDER操作数据库的实例原码,不是用组件-------时刻在线等待!!!------
- java swing 调用dll后在窗口内切换输入法程序出现无响应!
- java能开发串口通讯程序吗?
- 初学JAVA的两个基础问题
初始化它需要一个 “包含 Inner的 WithInner 类” 的实例,
Inner 与 WithInner 中时要保持一个关联才行
(隐含引用关系 WithInner <-->Inner ),InheritInner 扩展了 WithInner.Inner 类, 这个InheritInner
要初始化的话也要先调用父类的构造函数,那它能直接 super() 么?
不能! 因为以前
WithInner wi = new WithInner();
With.Inner inner = wi.new WithInner.Inner();
这里提供了一个 wi 的引用才能构造一个 WithInner.Inner 实例。那现在 InheritInner 要初始化必须先初始化父类的状态,
那是不是也要“为 WithInner.Inner 的构造函数提供一个 WithInner 句柄呢?"
这个句柄怎么给呢? public InheritInner(WithInner wi){
wi.super();
// 这个能我是这样理解的: wi 是一个 WithInner 的句柄,但是他代表着一个
// WithInner <--> WithInner.Inner 隐含的句柄,用它就能初始化 WithInner.Inner.
// wi.super() 代表着初始化 wi 相关联的 WithInner.Inner 这个父类。
}
WithInner wi = new WithInner();
WithInner.Inner inner = wi.new WithInner.Inner();public InheritInner(WithInner wi){
wi.super(); // 这跟 wi.new Inner() 不是一个模子里倒出来的?
// 因为这里要先初始化父类(也就是 WithInner.Inner )的状态。
}
同时,个人觉得tij对于这些细节讲述的很细,唯一的遗憾就是我们在开发中往往不会使用这些。
子类的构造函数先必须调用父类的构造函数而内部类特殊性在于其构造函数要一个外部类的实例才能调用两个合在一起就是wi.super();