S07L07 – Java中不同类型的内部类

精通 Java Nested Classes:针对初学者和开发者的全面指南


─────────────────────────────────────────────
目录

─────────────────────────────────────────────

  1. 介绍 …………………………………………………………. 第1页
  2. 理解 Nested Classes …………………………………. 第2页
    1. 什么是 Nested Classes? …………………………………. 第2页
    2. Nested Classes 的分类 ………………………….. 第3页
      • Static Nested Classes …………………………………. 第3页
      • Non-Static Nested Classes (Inner Classes) ……………. 第3页
  3. 深入探讨 Non-Static Nested Classes …………………… 第4页
    1. Member Inner Classes …………………………………. 第4页
    2. Local Inner Classes …………………………………… 第5页
    3. Anonymous Inner Classes ……………………………….. 第6页
  4. 代码示例:逐步解释 …………………………………… 第7页
  5. 对比表:Static vs. Non-Static Nested Classes …………. 第8页
  6. 结论 …………………………………………………………. 第9页

1. 介绍

Java 编程提供了多种组织 class 和 object 的方式,其中最强大的概念之一是使用 nested classes。Nested classes——常常也称为 inner classes——允许 developers 逻辑上将仅在一个地方使用的 class 进行分组,从而提高封装性和可读性。在本 eBook 中,我们探讨了不同类型的 nested classes,包括 Static Nested Classes 和 Non-Static Nested Classes (Inner Classes)。我们还提供了详细的解释、插图和示例 program code,帮助具有基础知识的初学者和 developers 掌握这一主题。

主要优势:

  • 通过将相关的 class 分组,更好地组织 code。
  • 提高 Java 应用程序中的封装性和可读性。

潜在缺点:

  • 如果管理不当,过度使用 nested classes 可能会降低 program 结构的清晰度。

下表快速对比了 Static Nested Classes 与 Non-Static Nested Classes (Inner Classes) 之间的差异:

特性 Static Nested Classes Non-Static Nested Classes (Inner Classes)
Object 访问 无法访问 instance 成员 可以访问 instance 和 static 成员
声明 声明为 static 未声明 static
实例化 无需 outer instance 需要 outer class 的 instance
使用场景 用于工具或辅助用途的 classes 与 outer class 的 instance 紧密耦合的 classes

2. 理解 Nested Classes

2.1 什么是 Nested Classes?

Nested Classes 是在另一个 class 内定义的 classes。它们用于逻辑上将仅与包含它们的 class 相关的 classes 分组。根据其声明方式,这些 classes 可分为两大类:static nested classes 和 non-static (inner) classes。虽然常用 “inner class” 这一术语,但它本质上指的是 non-static nested classes。

2.2 Nested Classes 的分类

Nested 或 inner classes 有几种子类型:

  • Static Nested Classes:
    • 使用 static keyword 声明。
    • 它们不能直接访问 outer class 的 non-static 成员。
  • Non-Static Nested Classes (Inner Classes):
    1. Member Inner Class:
      • 作为 outer class 的 member 声明。
      • 允许访问 outer class 的所有成员。
    2. Local Inner Class:
      • 在 method (或 block) 内声明。
      • 其作用域仅限于声明的 block 或 method。
    3. Anonymous Inner Class:
      • 没有名称,并在单个语句中声明和实例化。
      • 适用于诸如 event handling 之类的一次性使用场景。

3. 深入探讨 Non-Static Nested Classes

3.1 Member Inner Classes

Member Inner Class 定义在 outer class 的 member 级别。由于它是 outer class 的 member,因此可以访问 outer class 的 static 和 instance 变量及 methods。当 inner class 需要与 outer class 的 instance 数据紧密配合时,这是最常见的情况。

3.2 Local Inner Classes

Local Inner Classes 在 method 内声明,类似于 local variables。它们的使用通常仅限于声明它们的 method 作用域。这使得当某个 class 功能只需要在单个 method 内使用时,更容易实现逻辑的封装。

3.3 Anonymous Inner Classes

顾名思义,Anonymous Inner Class 没有名称。它在一个表达式中创建和实例化。此类型特别适用于动态创建具有少量修改的 object 实例,例如在 event-driven programming 中重写 methods。


4. 代码示例:逐步解释

下面是一个简单的 Java program,演示了不同 nested classes 的使用:

代码解释:

  • OuterClass 包含一个 String 变量 “message.”
  • MemberInnerClass 被定义为 OuterClass 的 instance member,并可访问 “message.”
  • 在方法 demonstrateLocalInner() 内声明了一个 local inner class,即 LocalInnerClass,其作用域仅限于该 method。
  • 在 demonstrateAnonymousInner() 方法中,实现了一个 anonymous inner class,其中实例化了一个 Runnable 对象,并且没有显式声明 class 名称。
  • 在 main 方法中,创建了 nested classes 的实例,并一步步调用它们的 methods,在控制台上显示各自的输出。

5. 对比表:Static vs. Non-Static Nested Classes

(参见介绍部分提供的对比表以获取简明概述。以下是有关使用的附加信息:)

方面 Static Nested Classes Non-Static Nested Classes
访问级别 无法直接访问 instance 成员 可以同时访问 instance 和 static 成员
实例化 无需 outer class 的 instance 即可实例化 需要 outer class 的 instance
内存关联 不持有对 outer 的隐式引用 持有对 outer instance 的隐式引用
使用场景 用于独立于 outer 的 utility 或 helper classes 增强或依赖 outer class 的 classes

6. 结论

总之,Java 中的 nested classes 提供了一种强大的 code 组织方式。理解 static nested classes、Member Inner Classes、Local Inner Classes 以及 Anonymous Inner Classes 之间的区别,使 developers 能够以更封装和逻辑的方式组织 code。本 eBook 探讨了关键概念,提供了详细示例,并解释了 Java 中 nested classes 的逐步执行过程。掌握这些概念后,您将能够应对那些要求紧密耦合和高度功能封装的场景。

继续在您的 Java 项目中探索并尝试使用 nested classes,以实现更清晰、更有条理的 code。

注意: 本文章由 AI 生成。






分享你的喜爱