Geekroid-ギークロイド(仮)|ITエンジニアの日常をささいな情報で彩るコラム

ITエンジニアの転職

ネストしたクラスを定義する

クラスは、classブロックの配下に入れ子で定義することもできます。これをネストクラスと呼びます。ネストクラスは、更に以下のように分類できます。

ネストクラス
staticメンバークラス
インナークラス(内部クラス)
 ┣非staticメンバークラス:メンバークラスの中でもstatic宣言されていないもの
 ┣匿名クラス(無名クラス):名前を持たないクラス
 ┗ローカルクラス:メソッド配下で宣言されたクラス

メンバークラスとは、classブロックの直下で定義されたクラスのことです。メンバークラスに対して、クラスを囲っている外側のクラスのことをエンクロージングクラスと呼びます。特定のクラスでのみ利用するクラスなどは、メンバークラスとして定義することで、関係ない他のクラスから誤って参照されてしまうことを防げます。

class エンクロージングクラス名 {
  class メンバークラス名 {
    ...メンバークラスの実装...
  }
  ...エンクロージングクラスの実装...
}

なお、メンバークラスを定義する際には、原則としてstatic修飾子を付与するようにしてください。というのも、非staticなメンバークラスは、インスタンス化に際してエンクロージングオブジェクトへの参照を保持するためにメモリーを消費するからです。また、この参照によってエンクロージングオブジェクトの破棄が妨げられることもあります。
非staticなメンバークラスを利用するのは、エンクロージングオブジェクトのインスタンスフィールドにアクセスしなければならない状況に限定すべきです。

関連ページ
無名クラス

オブジェクト指向構文
class命令
new演算子
フィールドを定義する
static final修飾子
メソッドを定義する
コンストラクターを定義する
package宣言
import命令
import static命令
ネストしたクラスを定義する

Geekroid-ギークロイド(仮)|ITエンジニアの日常をささいな情報で彩るコラム

ITエンジニアの転職