Javaでは、ネストされたクラスとは何ですか?それらは何をしますか?
4 に答える
それらは他のクラス内の単なるクラスです。それらはクラスの階層を持つことを可能にし、それらを非公開にすると、それらを使用してクラスの外部に公開されないデータをカプセル化する便利な方法になります。Sun には、それらに関する短いチュートリアルがあります。
Java における内部クラスの最も重要な用途の 1 つは、リスナーです。または類似の個別のクラス全体を記述する代わりに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 のドキュメントは、次の理由でそれらを使用していることを示しています。
- これは、1 つの場所でのみ使用されるクラスを論理的にグループ化する方法です。
- カプセル化を高めます。
- ネストされたクラスは、コードをより読みやすく保守しやすくすることができます。
静的ネスト クラスと内部クラスの2 種類があります。
ネストされた静的クラスは、静的と宣言されたネストされたクラスです。他のクラスとの強い関係を示すために、それを所有するクラス内に「隠しておく」ことを可能にする、密結合されたトップレベル クラスのシンタックス シュガーです。ただし、静的なネストされたクラスには、実行時に特別な動作や特権はありません。これは、上記の利点を実現するためのパッケージ化の利便性です。
内部クラスは、静的と宣言されていないネストされたクラスです。静的なネストされたクラスとは異なり、内部クラスには、内部クラスにのみ適用される特別な規則/動作があります。具体的には、内部クラスのインスタンスは、外部クラスのインスタンスのコンテキスト内にのみ存在できます。つまり、各内部クラスのインスタンスは、特定の外部クラスのインスタンスに関連付けられています。内部クラスのインスタンスは、関連する外部クラスのインスタンスに特別にアクセスできます。これにより、 でおなじみの「友達」のようなアクセスが可能になりますC
。
この件については、詳細を学ぶためのドキュメントがたくさんありますが、うまくいけば、それで始めることができます。Nest logical step は、ネストされたクラスに関する Sun のチュートリアルです。