0

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

class Foo1 {
    class Inner {
    }
}

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

3 回答 3

2

如果您将内部类声明为静态,则可以这样做,否则您需要外部类 Foo1 的实例。

class Foo1 {
    static class Inner {
    }
}

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

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

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

于 2012-05-14T13:54:41.147 回答
1

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

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

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

于 2012-05-14T14:19:38.977 回答
0

让你的内心阶层static。没有可从中获取非静态类定义的实例

于 2012-05-14T13:53:53.110 回答