>我在搜索的问题中没有找到答案,这就是我问它的原因。
class outer
{
class inner // non static .
{
}
}
For creating object of inner class I am unable to understand the logic of the part to the right of assignment operator .
outer o = new outer () ;
outer.inner y = o. new inner () ; // I have doubt in this line .
这里的 outer.inner 是返回类型,但正确的部分呢?
我知道的事情:我们不能写 outer.inner y = new outer.inner (( ;由于内部是非静态的。
outer o = new outer () ;
outer.inner y = o. new inner () ;
因此,outer.inner
的第一部分是您所说的返回类型。
其次,o
是对包含内部对象的外部对象的引用,只有当您具有对外部对象的引用时,您才会访问内部对象。 现在o. new inner () ;
只是说"进入对象o
,然后创建一个类型为 inner
的对象"。
问题是非static
内部类绑定到包含类的特定实例。这就像类定义有一个隐藏的引用成员,有点:
class Outer {
class Inner {
private final Outer outer;
Inner(Outer outer) { this.outer = outer; }
}
}
这就是outer.inner y = o.new inner()
发生的事情,因为inner
不是static
它需要一个outer
来实例化,并且该语法用于将隐藏的outer
引用传递给实例。
如果Inner
变得static
那么它不再需要一个合格的实例,外部类的名称就足够了,例如:new Outer.Inner()
.