在 Java 中,可以在另一个类中声明一个类,这称为嵌套类。嵌套类的可见性和范围受声明它的类的限制。
嵌套类的类型
嵌套类可以声明为静态或非静态。当我们将 static 修饰符应用于嵌套类时,它被称为静态嵌套类; 否则,它是非静态的。嵌套静态类的属性是它只能直接访问封闭类的静态成员。封闭类的其他成员只能通过该类的对象访问。由于这个限制,只有在极少数情况下,我们才需要静态嵌套类。
为什么我们需要嵌套类?
原因很简单。它们通过帮助我们执行以下操作来帮助创建更高效的代码:
将相关类分组到一个逻辑单元中
利用封装
利用代码的可读性和可维护性
有时,我们需要辅助类并且可以被其他类使用。这在 Java 的事件侦听器类及其 GUI 组件中尤为明显。例如,当用户单击按钮或移动鼠标指针时,此操作会生成一个事件。处理该事件的应用程序会执行一段仅适用于该应用程序的代码。这段代码可以写在一个单独的类中,但是创建一个没有多大意义,因为这段特定的代码应该只被另一个特定的类使用。因此,内部类或匿名类准确地声明在需要的地方; 在代码的另一部分,它可能没有值。
有时,我们需要一个代码,它符合一个类的质量以及另一个类的必要性。我们也不希望外部类的私有成员以任何方式暴露,利用封闭类的现有封装规范。在这种情况下,我们可以在外部类的定义中创建一个内部类。然后,封闭类将可以完全访问外部类的私有成员,并在边界内保持自身受到保护。可以将内部类声明为私有以强制执行严格封装并隐藏自身。
通过使用内部类,代码变得更加可维护和可读。可以轻松避免很多不必要的代码。据称需要一对一依赖的类可以拥有它们而无需任何大惊小怪或神秘的代码。假设可以将某个事件侦听器或过滤类定义创建为顶级类,并且可以在项目中数百个 Java 文件中的任何位置。对于程序员来说,找到它们可能是一件很忙的事情。相反,如果我们可以使用内部类或匿名类来实现相同的想法,那么代码肯定会变得更具可读性和可维护性。
结论
嵌入在另一个类中的类称为嵌套类,它可以是静态的或非静态的。静态内部类几乎没有用处,没有名称的非静态类称为匿名类,Java 可扩展在其 API 库中使用匿名类,了解将类设计为顶级类以及一些内部类是有充分理由的,这是决定 Java 内部类实用性的真正关键。