在java中什么是嵌套类,它们有什么作用?
4 回答
它们只是其他类中的类。它们使具有类的层次结构成为可能,如果您将它们设为私有,它们是封装未在使用它们的类之外公开的数据的便捷方法。Sun 有一个关于它们的简短教程
Java 中内部类最重要的用途之一是侦听器。您无需为一个ActionListener
或类似的类编写一个完整的单独类,而是就地创建它:
button.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
... your code here ...
}
}
这些内部类通常调用外部类中的函数(它们捕获指向它们在其中创建的对象的指针),并导致比具有必须确定单击哪个按钮等逻辑的单个回调更整洁的代码。添加或删除按钮时,您也不必在多个位置修改代码,因为内部类是在您创建按钮的地方创建的。它相当优雅。
嵌套类是在类中声明的类,但具有修饰符static
。它们是一种组织类的方式,以便它可以访问其外部类的私有声明,并且可以用来更好地指示外部类和嵌套类之间的关系。
它们与内部类(以相同方式声明但没有静态)不同,因为内部类必须具有外部类的实例作为引用才能被实例化。相比之下,嵌套类不绑定到外部类的特定实例。
编辑:回应那些说“嵌套类”既可以是静态嵌套类也可以是内部类的人。好的,但是您永远不会将内部类称为嵌套类,对吗?当然这不是规范(A nested class is any class whose declaration occurs within the body of another class or interface.
),但它是在实践中的使用方式。
嵌套类是在另一个类中定义的类。Sun 文档表明您使用它们是因为:
- 这是一种对仅在一个地方使用的类进行逻辑分组的方法。
- 它增加了封装。
- 嵌套类可以产生更易读和可维护的代码。
有两种类型:静态嵌套类和内部类。
静态嵌套类是已声明为静态的嵌套类。它是紧密耦合的顶级类的语法糖,允许它被“隐藏”在其拥有的类中,以表明它与其他类的强关系。然而,静态嵌套类在运行时没有任何特殊行为或特权——它为实现上面列出的好处提供了方便的包装。
内部类是尚未声明为静态的嵌套类。与静态嵌套类不同,内部类具有仅适用于内部类的特殊规则/行为。具体来说,内部类的实例只能存在于外部类实例的上下文中,即每个内部类实例都与特定的外部类实例相关联。内部类实例对其相关的外部类实例具有特殊访问权限。这允许您在 中可能熟悉的类似“朋友”的访问C
。
有大量关于该主题的文档可以了解更多信息,但希望能帮助您入门。嵌套逻辑步骤是 Sun 关于嵌套类的教程。