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

时间:2012-05-14 13:38:58

标签: java constructor inner-classes

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

class Foo1 {
    class Inner {
    }
}

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

3 个答案:

答案 0 :(得分:2)

如果你声明Inner类是静态的,你可以这样做,否则你需要一个外部类Foo1的实例。

class Foo1 {
    static class Inner {
    }
}

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

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

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

答案 1 :(得分:1)

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

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

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

答案 2 :(得分:0)

制作内心课static。没有实例可以获得非静态类定义