Java 中静态嵌套类和非静态嵌套类之间的区别

2024 年 9 月 10 日 | 阅读 3 分钟

在 Java 编程语言中,嵌套类是指定义在另一个类内部的类。这些嵌套类可分为两类:静态嵌套类和非静态嵌套类,后者也称为内部类。它们的主要区别在于它们与外部类的关系以及它们对实例变量和方法的访问权限。静态嵌套类通常用于逻辑上分组相关的实用工具类或提供一种方便的打包相关功能的方式。非静态嵌套类通常在嵌套类与其外部类之间存在密切关系时使用,它们可用于实现复杂的数据结构或维护封装。

静态嵌套类

在 Java 中,静态嵌套类是指使用 static 关键字在另一个类内部定义的类。它与非静态嵌套类(内部类)的区别在于,它不依赖于外部类的任何实例,并且可以独立访问。无需外部类实例即可访问和实例化它。

文件名: OuterClass.java

输出

Outer static field: 10
Nested field: 30
Outer static field: 10
Nested field: 40
Outer static field: 10
Nested field: 50

非静态(内部)嵌套类

Java 中的非静态嵌套类,也称为内部类,是在另一个类内部定义且未用 static 关键字标记的类。在 Java 中,非静态嵌套类(也称为内部类)与外部类的实例紧密关联,这使它们能够直接访问其实例成员。内部类可以在无需显式引用的情况下引用和修改外部类的实例变量和方法。它们提供了一种将类进行逻辑分组的方式,并使它们能够更紧密地相互交互。

文件名: OuterClass.java

输出

Outer instance field: 10
Inner instance field: 20

静态嵌套类与非静态(内部)类的区别

静态嵌套类非静态(内部)类
可独立实例化需要外部类的一个实例
独立于外部类的任何实例与外部类的实例紧密关联
可直接访问静态成员可访问静态成员和非静态成员
无法直接访问实例字段可直接访问实例字段
无法调用非静态方法可调用静态方法和非静态方法
无法访问非静态嵌套类可访问静态嵌套类和非静态嵌套类