文系seの備忘録

Excelの改行でひたすらスペースを打っていた機械音痴の文系seが日々の備忘録を綴る。

ネストクラス

ネストクラスってなに???

クラスの中にさらにクラスをつくること。
こうすることで外に見えるクラスが無駄に多くなることを防ぎ、プログラマにとって分かりやすいプログラムとなる。

ネストクラスは外側のクラスのメンバの1つ。
非staticな内側クラスを「インナークラス」という。



ネストクラスのルール

共通
・外側のクラスと同じ名前を使用できない
・アクセス修飾子を使用できる
・abstract, final修飾子を使用できる


static
非staticメンバ、staticメンバどちらも持てる。
外側のクラスで定義したインスタンス変数にアクセスできない


非static
staticメンバを持てない。
外側のクラスで定義したインスタンス変数にアクセスできる。



こうして何個もネストできる

クラスファイルは「$」で区切られている。
f:id:ron623:20150314092118p:plain



サンプルコード

非スタティックなクラス(インナークラス)と、スタティックなクラス。

上記の呼び出しは以下のようにして行う。
アクセス

//ネストクラスへのアクセス
NestCls.Inner inner = new NestCls().new Inner();
inner.innerMtd();

実行結果
f:id:ron623:20150314100401p:plain




で、、、、ここから疑問点。
何日か前の記事にも書きましたが

なんで非staticクラスではstaticメンバを持てないんだ??

だとしたら外側の非staticクラスでstaticメンバ持てるのもおかしくない?


以下、私の思うstatic

f:id:ron623:20150314100701p:plain

f:id:ron623:20150314100755p:plain


・・・・と思ったけど、いちばんうえのほうで書いた

ネストクラスは外側のクラスのメンバの1つ。

これがカギになりそう。


メンバはクラスがインスタンス化されるたびに複数できる。


ここまでは分かった。なんか前よりもゴールに近づいた気がする。。。