日期:2014-05-20  浏览次数:20704 次

关于内部类的继承问题
[code=Java][/code]
//: InheritInner.java
class WithInner
{
class Inner{}
}

public class InheritInner extends WithInner.Inner
{
//! InheritInner(); // Won't compile
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 {
//执行这里的代码 
}
}
------解决方案--------------------
这个问题我们分为两个部分来看就清晰多了。。。
一、首先是继承:当InheritInner extends WithInner.Inner的时候 你就必须要调用父类的构造方法,也就是你要继承的Inner类的构造方法 按道理应该写成这样:
InheritInner()
{
super();
}

但是这样就留下了问题了,因为我们都知道内部类的实例化必须需要外部类的引用、、、那么就引出了第二个问题。
二、我们了解内部类的构造器必须连接到外部类的引用上。所以我们需要一个外部类的引用,因此传了一个参数WithInner 然后我们理解这个wi.super()就好理解了,也就是要调用内部类的构造方法时必须要一个外部类的引用同在,所以把wi 和调用内部类构造方法的super()绑定在一起,这是特定的语法吧。总而言之wi.super()调用的是内部类的构造方法。这个你如果用编译器看的话很容易看出来,你把鼠标放在super();方法上就显而易见了。在也没什么鸟、、、你懂的、、