ネストクラス
ネストクラスってなに???
クラスの中にさらにクラスをつくること。
こうすることで外に見えるクラスが無駄に多くなることを防ぎ、プログラマにとって分かりやすいプログラムとなる。
ネストクラスは外側のクラスのメンバの1つ。
非staticな内側クラスを「インナークラス」という。
ネストクラスのルール
共通
・外側のクラスと同じ名前を使用できない
・アクセス修飾子を使用できる
・abstract, final修飾子を使用できる
static
非staticメンバ、staticメンバどちらも持てる。
外側のクラスで定義したインスタンス変数にアクセスできない
非static
staticメンバを持てない。
外側のクラスで定義したインスタンス変数にアクセスできる。
こうして何個もネストできる
クラスファイルは「$」で区切られている。
サンプルコード
非スタティックなクラス(インナークラス)と、スタティックなクラス。
上記の呼び出しは以下のようにして行う。
アクセス
//ネストクラスへのアクセス
NestCls.Inner inner = new NestCls().new Inner();
inner.innerMtd();
実行結果
で、、、、ここから疑問点。
何日か前の記事にも書きましたが
なんで非staticクラスではstaticメンバを持てないんだ??
だとしたら外側の非staticクラスでstaticメンバ持てるのもおかしくない?
以下、私の思うstatic
・・・・と思ったけど、いちばんうえのほうで書いた
ネストクラスは外側のクラスのメンバの1つ。
これがカギになりそう。
メンバはクラスがインスタンス化されるたびに複数できる。
ここまでは分かった。なんか前よりもゴールに近づいた気がする。。。