创建内部类的对象时无法理解赋值运算符右侧部分的逻辑



>我在搜索的问题中没有找到答案,这就是我问它的原因。

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() .

最新更新