这是一个可能的重复问题:
Java内部类和静态嵌套类
在Java中,内部类有什么用途?嵌套类和内部类是一样的吗?
另一个答案已经很好地解释了它们之间的区别。关于它们的使用/相关性,这是我的看法:
它们很方便地实现回调,而不需要创建新的命名类。
button.addActionListener(
new ActionListener() {
public void actionPerformed( ActionEvent e ) {
frame.dispose();
}
}
);
它们还可以方便地用于线程(例如匿名Runnable
)和一些其他类似的模式。
静态嵌套类本质上就像普通类一样,只是其名称为OuterClass.StaticNestedClass
,您可以使用修饰符进行操作。因此,它提供了某种形式的封装,这是使用顶级类无法实现的。
例如,考虑一个LinkedList
,您希望其中的Node
类(仅在内部使用)不会在包视图中可见。将其设置为静态嵌套类,以使其完全内部化到LinkedList
中。
内部类的实例可以访问其封闭类实例的字段。再次考虑链表,并想象Node
是一个内部类:
public class LinkedList {
private Node root = null;
public class Node {
private Object obj;
private Node next;
...
public void setAsRoot() {
root = this;
}
}
public Node getRoot() {
return root;
}
public void setRoot( Node node ) {
root = node;
}
}