Java作用域规则和内部类

Java作用域规则和内部类,第1张

Java作用域规则和内部类

静态嵌套类1与外部类完全相同,不同之处在于它们可以访问外部类的所有成员,而与访问限定符无关。它们与外部类的任何实例分开存在,因此需要引用实例才能访问外部类的任何实例变量或非静态方法。

非静态嵌套类(称为 内部类
)仅在外部类的实例的上下文中才存在。构造后,它们会

this
自动生成第二个字段,您可以使用语法从内部类中访问该字段
Outer.this
。内部类的每个实例都被外部类的单个实例包围。同样,静态嵌套类的所有访问权限都适用于内部类。但是,由于它们已经具有可用的外部类实例,因此它们可以自动访问外部类的实例变量和方法。

要对内部类和访问说明符进行漂亮(非常详细)的讨论,可以阅读《
内部类说明》
。它描述了嵌套类如何访问

private
其外部类的成员。嵌套类教程是比较温和的读物。

除了题外话:假设您具有以下类结构:

public class O {    public O() { ... }    public class I { // an inner class        public I() { ... }        ...    }    ...}

并且您创建了的实例

O

O outer = new O();

现在假设您要创建的实例

O.I
。您不能只使用它,
new O.I()
因为新的实例
I
需要包含在的特定实例中
O
。为此,Java提供了以下语法:

O.I inner = outer.new O.I();

然后

inner
将其第二个
this
字段设置为引用
outer

请注意,这种“合格的

new
运算符”语法仅用于内部类。如果
I
static
嵌套类,则不必要(实际上是一个错误)。

1 您经常会遇到“静态内部类”一词(令人尴尬的是,在此答案的早期版本中包括)。这是不正确的术语。在Java中,“内部类”特别是非

static
嵌套类。



欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/zaji/5489107.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-12
下一篇 2022-12-12

发表评论

登录后才能评论

评论列表(0条)

保存