bil*_*llu 15 java inner-classes
可能重复:
Java内部类和静态嵌套类
Java中内部类的用途是什么?嵌套类和内部类是否相同?
ewe*_*nli 14
另一个答案很好地解决了这个差异.关于它们的用法/相关性,这是我的观点:
它们很容易实现回调,没有创建新命名类的负担.
button.addActionListener(
new ActionListener() {
public void actionPerformed( ActionEvent e ) {
frame.dispose();
}
}
);
Run Code Online (Sandbox Code Playgroud)
它们对于线程(例如匿名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;
}
}
Run Code Online (Sandbox Code Playgroud)
Node
属于a的每个实例LinkedList
都可以直接访问它.列表与其节点之间存在隐式所有权关系 ; 该列表拥有其节点.如果使用常规类实现,相同的所有权关系将需要额外的代码.
pol*_*nts 11
不,他们不一样:内在阶级不是static
.
JLS 8.1.3内部类和封闭实例
一个内部类是不明确或隐含声明为静态的嵌套类.
另请参阅Joe Darcy的下图:
Joseph D. Darcy的Oracle Weblog - 嵌套,内部,成员和顶级类
归档时间: |
|
查看次数: |
11056 次 |
最近记录: |