【发布时间】:2012-04-16 19:52:41
【问题描述】:
我有以下内部类的情况。
class Outer {
private class Inner1 extends InnerBase {
}
private class Inner2 extends InnerBase {
}
private class InnerBase {
}
}
通常我认为内部类对外部类有一个额外的、隐藏的“this”。
但是,如果内部类是从另一个内部类派生的,会发生什么呢?
所有内部类(Inner1、Inner2、InnerBase)都应该有一个额外的 this。
Inner1、Inner2 是否有自己对外部 this 的引用? 或者只是重用 InnerBase 中的那个,导致行为略有不同?
(隐藏 this == 指向外部类实例的引用)
【问题讨论】:
-
据我所知,
this总是指向你所在的类的实例。没有办法(除非你做一个)从内部类访问父类实例实例。我不太清楚你所说的“隐藏这个”是什么意思。 -
@Lattyware 非静态嵌套类的每个实例都有对其创建它的封闭类实例的引用。这也是为什么您不能在静态方法中实例化非静态嵌套类型的原因。在示例中,您可以通过以下方式访问此封闭实例:
Outer.this -
@stefanbachert 你能解释一下行为差异在哪里吗?
-
在第一种情况下,任何内部类都有一个隐藏的外部 this(浪费一些内存),在后面只有第一个内部类有一个隐藏的外部 this。
-
@MichaelSchmeißer 好吧,你可以在静态方法中实例化非静态嵌套类型,你只需要一个外部实例来使用奇怪的外部新语法:
Outer o = new Outer(); Inner1 i1 = o.new Inner1();
标签: java inner-classes