Java -非staticなインナークラス-
クラス内に定義したstatic修飾子の付かないクラスを非staticなインナークラスといいます。
非staticなインナークラスは、外部クラス(インナークラスを含む外側のクラス)をインスタンス化し、さらに インナークラスをインスタンス化しないと利用できません。
非staticなインナークラス
非staticなインナークラスは、外部クラスのメンバの1つとして定義されているインナークラスで、static指定のないもののことです。
非staticなインナークラスは、そのインナークラスを含むクラスをインスタンス化しない限り利用することはできません。
インナークラス名 変数名 = new インナークラス名(引数);
変数名.メソッド名;
または、
new インナークラス名().メソッド名(引数);
他のメンバへのアクセス
クラスのメンバが自由にアクセスが可能なように、メンバの一員であるインナークラスも外部のクラスの他のメンバに自由にアクセスすることが できます。
インナークラス内での修飾子
インナークラスとクラスのメンバとして指定したとき、メンバ変数と同様にpublic,protected,ptivate,abstractなどの 修飾子を付けることができます。
ただし、インナークラスのメンバにstatic修飾子を付けることはできません。
thisの利用
thisは、自分のインスタンスを指すキーワードです。
インナークラス内でthisを使用した場合は、インナークラスのインスタンス自身や、インナークラス内のインスタンス内のメンバを 指します。
外部クラスのインスタンスやインスタンス内のメンバを指す場合は、「外部クラス.this」と指定します。
他のクラスからのインナークラスの利用
非staticなインナークラスは他のメンバと同様、インスタンス化して初めて利用できます。
外部クラス名 変数名1 = new 外部クラス名();
外部クラス名.インナークラス名 変数名2 = 変数名1.new インナークラスのクラス名();
変数名2.インナークラス内のメソッド名();
または
外部クラス名.インナークラス名 変数名1 = new 外部クラス名().new インナークラス名();
変数名1.インナークラスのメソッド名();
または
new 外部クラス名().new インナークラス名().インナークラスのメソッド名();