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