前回のあらすじ
「static」を使ったインナークラスの場合、アウタークラスのオブジェクトを作成しなくてもいいということだった。
その際、「static」を使わない場合と比べてオブジェクトを作るときに書き方が少し違う点に注意。
「static」を使わない場合
アウタークラスのクラス名 オブジェクト名 = new アウタークラスのクラス名();
アウタークラスのクラス名.インナークラスのクラス名 インナークラスのオブジェクト名 = アウタークラスのオブジェクト名.new インナークラスのクラス名();
「static」を使う場合
「static」を使わない場合の下の部分と比べてみると、ちょっと違うところがある。
アウタークラスへのアクセス
前回まではインナークラスへのアクセスの方法について見てきた。
インナークラスに「static」を使った場合はアウタークラスのオブジェクトを作成しなくても良かったが、アウタークラスへのアクセスはどうなるかについて見ていく。
以下のコードは前回使用したものとほぼ同じもの。
Outerクラスに書かれた「外側」という文字を表示させようとしている。
実際に実行するときちんと「外側」と表示される。
String A=”外側”; static class Inner{
String B =”内側”;
}
}
public class OuterInner { public static void main(String[] args) {
Outer soto = new Outer();
System.out.println(soto.A);}
}
黄色の部分に注目。
「Outer soto = new Outer();」の形は、基本的なオブジェクトの作り方と同じ。
オブジェクトの作り方については以下の記事参照。
自作したクラスに状態を表すデータを作る-オブジェクトの作成方法 by Javaプログラミング初心者 Vol.37
文字を表示させるコードも「System.out.println(soto.A);」と、アウタークラスのオブジェクト名と「String A=”外側”;」の「A」という変数名を指定している。
「soto」など、作成したオブジェクトの利用方法については以下参照。
自分で作ったメソッドをオブジェクトを作って呼び出す by Javaプログラミング初心者 Vol.41
アウタークラスへアクセスしたい場合は、必ずアウタークラスのオブジェクトを作る必要がある。
インナークラスに「static」が使われていて、インナークラスのデータを使う際にアウタークラスのオブジェクトを作る必要が無くても、アウタークラスのデータが使いたいときはアウタークラスのオブジェクトを作る。
あくまでも「インナークラス」のデータを使う時にアウタークラスのオブジェクトが必要なくなるだけ。
アウタークラスの修飾子
アウタークラスに「static」を付けるとエラーになる。
アウタークラスは使える修飾子が限られており、「public」「abstract」「final」という修飾子のみ使うことができる。
これはクラスの中にクラスがある形(アウタークラスとインナークラスという関係がある)の場合に適用されるルール。
abstractについてはまた今度・・・。
最後に
アウタークラスのデータを使う時はアウタークラスのオブジェクトが必要になる。
その際はインナークラスに「static」があるかどうかは関係なし。
アウタークラスはアウタークラスで考えないといけない。
どっちのデータにアクセスしたいかによる。
両方にアクセスしたかったら、必要なコードをそろえるー。
コメント