ネストしたクラスを定義する
クラスは、classブロックの配下に入れ子で定義することもできます。これをネストクラスと呼びます。ネストクラスは、更に以下のように分類できます。
ネストクラス
┣staticメンバークラス
┗インナークラス(内部クラス)
┣非staticメンバークラス:メンバークラスの中でもstatic宣言されていないもの
┣匿名クラス(無名クラス):名前を持たないクラス
┗ローカルクラス:メソッド配下で宣言されたクラス
┣staticメンバークラス
┗インナークラス(内部クラス)
┣非staticメンバークラス:メンバークラスの中でもstatic宣言されていないもの
┣匿名クラス(無名クラス):名前を持たないクラス
┗ローカルクラス:メソッド配下で宣言されたクラス
メンバークラスとは、classブロックの直下で定義されたクラスのことです。メンバークラスに対して、クラスを囲っている外側のクラスのことをエンクロージングクラスと呼びます。特定のクラスでのみ利用するクラスなどは、メンバークラスとして定義することで、関係ない他のクラスから誤って参照されてしまうことを防げます。
class エンクロージングクラス名 { class メンバークラス名 { ...メンバークラスの実装... } ...エンクロージングクラスの実装... }
なお、メンバークラスを定義する際には、原則としてstatic修飾子を付与するようにしてください。というのも、非staticなメンバークラスは、インスタンス化に際してエンクロージングオブジェクトへの参照を保持するためにメモリーを消費するからです。また、この参照によってエンクロージングオブジェクトの破棄が妨げられることもあります。
非staticなメンバークラスを利用するのは、エンクロージングオブジェクトのインスタンスフィールドにアクセスしなければならない状況に限定すべきです。
関連ページ
無名クラス