ネストした型-内部クラス(インナークラス)(2)
「ネストした型-内部クラス(インナークラス)(1) - 愚鈍人」では、内部クラスの種類について述べたが、 もう少し、内部クラスについてみていく事にする。
複数のトップレベルクラスの記述
内部クラスに対して、パッケージの直下にある通常のクラスの事をトップレベルクラスと言うようだ。
内部クラスに入る前に少し寄り道をして、複数のクラスの記述方法についてみていく。
javaでは、通常、クラスとソースファイルが1対1に対応しており、1つのソースファイルに1つのクラスを記述する。
しかし、1つソースファイルに複数の(トップレベル)クラスが書けないわけではない。
以下にその例を示す。
リスト1(MultiClass.java)
但し、1つソースファイルに複数のクラスを記述するには制限がある。
public修飾子の付けられるクラスは1つだけで、public修飾子のつけられるクラスのクラス名とソースファイル名は一致する必要がある。
クラス名がソースファイル名と一致しない他のクラスには、publicを付ける事ができないが、アクセス修飾子praivate,protectedも付ける事もできないようだ。
インスタンスメンバーとして宣言された内部クラスの継承
ローカルクラスと異なり、インスタンスメンバー,静的メンバーともに、クラスのメンバーとして宣言される内部クラスは、アクセス修飾子public,praivate,protectedを付ける事ができる。
という事は、クラスの内部クラスメンバーを継承できる事を意味している。
次のプログラムは、内部クラスを持つクラスを継承したクラスより、スーパクラスの内部クラスのインスタンスを生成する例である。
リスト2(OuterSubClassUser.java)
多重ネスト
内部クラスを何重にも多重ネストする事ができる。
但し、外部クラスと同じクラス名の内部クラスを定義する事はできない。
以下のプログラムは、内部クラスを複雑に組み合わせて、多重ネストした例である。
リスト3(TopClass.java)
eclipseを使って外部クラス内に内部クラスを定義する。
eclipseの「新規Javaクラス」の作成ダイアログボックスを使って、既存のクラスに内部クラスのコードを自動生成する事ができる。
パッケージエクスプローラーにて外部クラスとなる既存のクラスを選択して、マウスの右ボタンクリックにて表示されるメニューより、 「新規(W)」→「クラス」を選択して表示されるダイアログボックスにて、エンクロージング型のチェックボックスにチェックをつけて、 右側のテキストボックスに外部クラスのクラス名を指定、「名前」欄に内部クラスのクラス名を指定後、完了ボタンを押下する。