Java 入門

ホーム > Java の基本 > 各種入れ子クラス - 静的入れ子クラス、内部クラス等

各種入れ子クラス - 静的入れ子クラス、内部クラス等

スポンサーリンク

オブジェクト指向プログラミングを実現するために、言うまでもなくクラスの定義は非常に重要です。

基本的なクラスの定義方法については、「クラス定義とオブジェクト」で説明しましたが、 Java ではさらに柔軟にクラスを定義することができます。

ここでは入れ子クラス (nested classes) について説明します。

入れ子クラスの種別

入れ子クラス (nested classes) は、あるクラス定義の内部で、さらに定義されたクラスのことです。 クラス A の定義の中で、クラス B を定義したら、クラス B は入れ子クラスであり、かつ、クラス A のメンバーといえます。

入れ子クラスには何種類かあります。それをそれぞれ見ていきましょう。

内部クラス (inner class)

次のコードを見てください。

Car クラスの中に Door クラスが定義されています。このようなクラスを内部クラス (inner classes) といいます。(内部クラスは入れ子クラスです)

内部クラスではそれを含むクラスのメンバーへアクセスできます。

内部クラスを利用する場合は、次のようにそれを含むクラスで修飾します。次の例では Car.Door クラスとしてオブジェクトを定義しています。

また、オブジェクトを生成する場合には、外部クラスオブジェクト.new として作成するところに注意してください。(上の例では car.new は全て小文字です)

静的入れ子クラス (static nested classes)

入れ子クラスで static 修飾されている場合です。

この場合は、静的入れ子クラス (static nested classes) といいます。この場合はそれを含むクラス (この場合は Car クラス) の変数へアクセスできません。

静的入れ子クラスを使う場合は、それを含むクラスとの結合性が無い (内部メンバーにアクセスできない) ので、それぞれバラバラにオブジェクト生成できます。

new もオブジェクトに関連付けされていません。

さらに内部クラスの特別な形態二つ

内部クラス (static ではない、入れ子クラス) の特別な2形態として、さらにローカルクラス (local classes) と匿名クラス (anonymous classes) についても触れておきます。

ローカルクラス (local classes)

ローカルクラスは次のようにメソッド内で定義されて使用されるクラスです。

ローカルクラスからはそれを含むクラスのメンバーにアクセス可能です。

匿名クラス (anonymous classes)

匿名クラス (anonymous classes) は、インターフェイスから直ちにクラスを定義してインスタンスを作成する簡便な方法です。

例えば次のようなインターフェイスがあるとします。

これをローカル変数定義時に、クラスの内容 (ここでは run メソッドの中身) を定義しています。

直ちにオブジェクトが作成され、そのメソッドを呼び出すことが可能です。

スポンサーリンク
ホーム > Java の基本 > 各種入れ子クラス - 静的入れ子クラス、内部クラス等