Java 创建内部类的对象时,无法理解赋值运算符右侧部分的逻辑
我在搜索的问题中没有找到答案,这就是为什么我要问这个问题Java 创建内部类的对象时,无法理解赋值运算符右侧部分的逻辑,java,inner-classes,Java,Inner Classes,我在搜索的问题中没有找到答案,这就是为什么我要问这个问题 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
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();因为内部是非静态的。问题在于非静态的内部类绑定到包含类的特定实例。这就像类定义有一个隐藏的引用成员,有点:
class Outer {
class Inner {
private final Outer outer;
Inner(Outer outer) { this.outer = outer; }
}
}
这就是所发生的outer.inner y=o.new inner()
,因为inner
不是static
,它需要实例化outer
,并且该语法用于将隐藏的outer
引用传递给实例
如果
internal
变为static
,则它不再需要符合条件的实例,外部类的名称就足够了,例如:new outer.internal()
问题是非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
引用传递给实例
如果internal
变为static
,则它不再需要符合条件的实例,外部类的名称就足够了,例如:newouter.internal()
因此,第一部分outer.internal
是您所述的返回类型
其次,o
是对包含内部对象的外部对象的引用,只有当您有对外部对象的引用时,才能访问内部对象。现在o。新内页()
只是简单地说“进入对象o
,然后创建一个internal
类型的对象”
因此,第一部分outer.internal
是您所述的返回类型
其次,
o
是对包含内部对象的外部对象的引用,只有当您有对外部对象的引用时,才能访问内部对象。现在o。新内页()
简单地说“进入对象o
,然后创建一个内部
类型的对象”.请遵守Java命名约定。尝试过之前的研究吗?请遵守Java命名约定。尝试过之前的研究吗?如果internal
是static
它将不是一个内部类,因此类名将令人困惑。@LewBloch:这只是术语,它将是一个嵌套类,但这只是一种诡辩。我不知道为什么他们必须在static关键字已经做了的情况下将inner和nested分开。不管你个人的观点是什么,或者你使用了什么贬义词,事实是(!)Java中的inner类是一个嵌套类,它不是static
。这不是“诡辩”,而是Java语言规范。“我建议你忘掉你的观点,@Jack,面对事实。@LewBloch:选择使用两个不同的同义词(!)来区分静态
嵌套类和非静态
内部类是一种诡辩。”。这是一种说“我们必须不惜一切代价为它找到不同的术语”的方式,特别是因为static
已经暗示了这种语义。他们选择的并不是事实,这只是我个人的观点,而是一个决定标准的委员会的观点,这使得你的观点完全无效。这个命名选择的论据是有争议的,不管“它们是事实”与否。我没有“论据”。无论您个人的观点如何,JLS定义这些术语是事实。杰克,你自己读一读,确认那些定义都在那里。鉴于语言的术语实际上是由语言的定义文档定义的,您可以选择使用这样定义的实际艺术术语,也可以选择固执。由于定义文档定义了术语,语言和它的社区将极其漠不关心地忽略您的反对意见。如果内部是静态的它将不是一个内部类,因此类名将令人难以理解。@LewBloch:这只是术语,它将是一个嵌套类,但这只是一种诡辩。我不知道为什么他们必须在static关键字已经做了的情况下将inner和nested分开。不管你个人的观点是什么,或者你使用了什么贬义词,事实是(!)Java中的inner类是一个嵌套类,它不是static
。这不是“诡辩”,而是Java语言规范。“我建议你忘掉你的观点,@Jack,面对事实。@LewBloch:选择使用两个不同的同义词(!)来区分静态
嵌套类和非静态
内部类是一种诡辩。”。这是一种说“我们必须不惜一切代价为它找到不同的术语”的方式,特别是因为static
已经暗示了这种语义。他们选择的并不是事实,这只是我个人的观点,而是一个决定标准的委员会的观点,这使得你的观点完全无效。这个命名选择的论据是有争议的,不管“它们是事实”与否。我没有“论据”。无论您个人的观点如何,JLS定义这些术语是事实。杰克,你自己读一读,确认那些定义都在那里。鉴于语言的术语实际上是由语言的定义文档定义的,您可以选择使用这样定义的实际艺术术语,也可以选择固执。因为定义文档定义了术语,所以语言及其社区将忽略您的反对