今天看编程思想第四版,10.9中的例子看的有点迷糊。
package innerclasses;
class WithInner{
class Inner{}
}
public class InheritInner extends WithInner.Inner{
InheritInner(WithInner wi){
wi.super();
}
public static void main(String[] args){
WithInner wi = new WithInner();
InheritInner ii = new InheritInner(wi);
}
}
疑惑就是这里为啥写成 wi.super();
如今查了下,比较好的解释如下:
这里的wi.super()并不是调用外部类的super,而是你调用Inner的super必须这么写。
内部类(非静态)构造器必须连接到其外部类的对象的引用,这就出现了诸如 wi.super() 看似奇怪的语法,可以看成是一个域。理解时你可以忽略掉前面的wi.