如何初始化从内部类继承的类



如何初始化从内部类继承的类?为什么 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的实例。

class Foo1 {
    static class Inner {
    }
}

但是您的直接问题似乎很奇怪:

foo1.this(); //won't compile

你想在这里做什么?调用一个名为"this"的方法,它看起来像,但希望使用无参数构造函数?如果是这样,只需使用this()

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

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

正如其他人所指出的,您可能会使Inner类成为静态的,在这种情况下,它不包含对Foo1实例的隐式引用。然后,只需在Foo2构造函数中调用super();即可。

让你的内部类static .没有可以从中获取非静态类定义的实例

最新更新