请教一个内部类继承问题

wb821147966 2008-03-16 11:06:06
请问:
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才对啊
...全文
66 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
bt_lose 2008-03-16
  • 打赏
  • 举报
回复
我的语文学的不好,没看懂是什么意思....
麻烦lz把意思说清楚.
按照我的理解, w1.super(); 这行没什么用.不知道lz想要做什么.
dracularking 2008-03-16
  • 打赏
  • 举报
回复
由于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();
dracularking 2008-03-16
  • 打赏
  • 举报
回复
这种构造比较特殊 因为InheritInner继承的是别类的内部类
所以在构造InheritInner之前 必须要有一个WithInner类的实例化对象才行
w1.super()的调用就是完成了因为中间构造器调用所需的enclosing instance的实例化
语法格式是这样的 试着去掉或者改成
w1 = new WithInner();
就会发现了

62,623

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧