java内部类继承--构造函数传参

/: innerclasses/InheritInner.java
// Inheriting an inner class.

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);
  }
} ///:~
求问这段代码中,InheritInner 继承自内部类Inner,为什么在实现构造的时候要向其中传递参数wi,wi.super()是必须要调用的吗?

要理解这个问题就得先理解内部类,Inner是WithInner的内部类,那么一般的用法
WithInner.Inner inner = new WithInner(). new Inner() ;
我们可以看出要想创建Inner的对象必须先创建WithInner的对象之后才能创建Inner对象,那么现在你要用一个类InheritInner继承Inner类,在继承过程中构造方法会被调用,即使你不写也会调用默认构造方法,但问题出现了,在调用父类Inner构造方法时找不到WithInner的对象,所以就必须给InheritInner类的构造方法传入WithInner对象再通过wi.super();方法调用Inner的默认构造方法,因为这是创建对象的基本流程,所以这句话wi.super();是必须的。


posted on 2016-02-26 15:15  寻步  阅读(1631)  评论(0编辑  收藏  举报