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);
System.out.println(ii);
}
}class WithInner{
class Inner{}
}
wi.super()指向class Inner{}  請問為什麽? 是特定的語法要求嗎?多謝

解决方案 »

  1.   

    super()是当前对象的直接父类的无参的构造函数。
    在这个问题中super()的执行就是执行了Outer.Inner 的默认构造函数。
    构造函数继承
    规则:
    1 子类无条件继承父类不含参数的构造函数
    2 若子类无自己的构造函数,父类的无参构造函数做为子类构造函数,若有创建对象先执行父类无参构造函数,再执行自己的构造函数
    3 父类中含参构造函数,子类可以在自己的构造函数中用super()来调用,必须放在第一句. 
      

  2.   

    这其实是内部类继承中的特殊语法内部类也和其他普通类一样可以被继承,但是继承内部类较继承普通类要复杂一些,需要设置专门的语法进行继承。创建OutputInnerClass类,使OutputInnerClass类继承ClassA类中的内部类ClassB。public class OutputInnerClass extends ClassA.ClassB{    //继承内部类b
    public OutputInnerClass(ClassA a) 
    {a.super();
    }}
    class ClassA{
    class ClassB{}
    }这玩意儿看看有个印象就好 一般没什么用
     在某个类继承内部类时,必须硬性给予这个类一个带参数的构造方法,并且该构造方法的参数为需要继承内部类的外部类的引用,同时在构造方法体中使用a.super()语句,这样才为继承提供了必要的对象引用。