如何初始化从内部类继承的类?为什么foo1.this()无法编译?

class Foo1 {
    class Inner {
    }
}

class Foo2 extends Foo1.Inner {
    //Foo2(Foo1 foo1) {foo1.this();} //won't compile
    Foo2(Foo1 foo1) {foo1.super();}
}

最佳答案

我不确定我是否理解foo1.this();应该做什么。也许您正在尝试调用Inner的默认构造函数。由于Inner不是一个静态类,因此它没有无参数构造函数。看起来只有那样。实际上,它具有一个带有Foo1参数的构造函数,该参数包含对其父对象的引用。

但是,对foo1.super()的调用将正常工作。它将使用Inner作为隐式父引用调用新foo1实例的构造函数。也就是说,新的Inner实例将绑定到给定的Foo1实例。

正如其他人指出的那样,您可能会导致Inner类成为静态类,在这种情况下,它不包含对Foo1实例的隐式引用。然后,您可以简单地在super();构造函数中调用Foo2

关于java - 如何初始化从内部类继承的类?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/10584452/

10-11 14:19