- 締切済み
ネストトップクラス・メンバクラスについて
現在、SJC-P取得に向け独学でJavaの勉強中です。 ネストクラス・インナークラスについて勉強している最中なのですが、 数冊テキストを読み込んでも、web検索をしても、イマイチよくわからない・・・というのが正直なところです。 どのクラス(アウタークラス/staticインナークラス/非staticインナークラス)の、 どういうメンバ(static/非static/private/final)が、 どのクラスのどういうメンバにアクセス出来るのかが整理しきれません・・・。 わからないなりに、まとめてみたのですが、理解が不十分で、かつ、この下記の通りの理解で正しいのかどうかもわかりません。 (言葉でうまく表現も出来ていない箇所も・・) また理解すべきポイントに不足があるかと思います。 どこが正しく理解出来ているのか・どこがどう間違っているかの指摘及びその内容・理解不足の箇所・よりわかりやすい例の追加や補記など、どうかよろしくお願い致します。 ●staticなインナークラス(=ネストトップクラス)について ・アウタークラスのインスタンスなしに、staticなインナークラスのインスタンスの生成が出来る。 ・staticなインナークラスからはアウタークラスの非staticメンバを直接アクセス出来ない。 (→ただし、staticアウターメンバになら直接アクセス出来る?staticであればprivateでもアクセス可?) ・staticなメソッド内で非staticなインナークラスのオブジェクトが生成出来ない。 ●非staticなインナークラス(=メンバクラス)について ・非staticなインナークラス内にstaticなメンバを持つことは出来ない。 ・アウタークラスのインスタンスを生成してからでないと非staticなインナークラスのインスタンスは生成出来ない。 ・アウタークラスの非staticメンバ及びstaticメンバに直接アクセス出来る。 ●アウタークラス(=外部クラス)について ・アウタークラスのstaticメソッド内で非staticなインナークラスのインスタンスは生成出来ない。 ・非staticインナークラスのメンバ及び、staticなインナークラスのメンバにアクセス出来る。 --------------------------------------------------------- (例)処理はさておき、定義はこんな感じを思い描いております・・ class Outclass{ private int aa; private static int bb; private outMethod1(); private static outMethod2(); class NotStaticInner{ private int cc; //private static int dd;//不可 private inNotStaicMethod1(); //private static inNotStaticMethod2();//不可 } class StaticInner{ private int ee; private static int ff; private inStaticMethod1(); private static inStaticMethod2(); } } 参考テキスト: 『Sun Certified Programmer for Java2 Platform5.0 Exam【310-055】』のChapter11:「ネストクラス・インナークラス」 参考URL: http://wisdom.sakura.ne.jp/programming/java/java46.html
- みんなの回答 (2)
- 専門家の回答
みんなの回答
- choconamacream
- ベストアンサー率44% (152/338)
- isle
- ベストアンサー率51% (77/150)
お礼
ご回答ありがとうございます!! なるほど~~この↓↓観点で理解していけばよかったのですね! 1.ネストクラス 2.インナークラス[内部クラス] -2.1.ローカルインナークラス[局部内部クラス] 3.無名クラス[匿名クラス] それぞれのポイントばかりを抑えようとしてそもそもの観点がブレてしまって 理解し切れなかったのですね、私。。。 また、そもそも私は「static」の特性を理解出来ておらず、 static/非staticの違いをよくわかってなかったみたいです(^^; もう少し勉強を進めたいと思います。 ありがとうございました。