- ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:内部クラス?のエラー)
内部クラス?のエラー
このQ&Aのポイント
- <A>と<B>のプログラムで内部クラスのエラーが発生します。
- <A>の場合、内部クラスを含むクラスのエンクロージング・インスタンスが必要となります。
- <B>の場合、内部クラスを別のクラスにすることでエラーが発生しません。
- みんなの回答 (1)
- 専門家の回答
質問者が選んだベストアンサー
フィールドやメソッドと同じく内部クラスもクラスのメンバの一種なので、 それがクラスに属するもの(staticメンバ)なのかインスタンスに属するもの(非staticメンバ)かの区別がある。 <A>のCalcクラスはstaticメンバではないのでstaticであるmainメソッドのコンテクストからは直接newすることはできない。 Test test = new Test(); Calc ca = test.new Calc(); のようにTestクラスのインスタンスを作成して、 そのインスタンスに属するCalcクラスをnewしてやるようにする。 Calc ca = new Test().new Calc(); のように書いてもいいが。 もしくは、Calc ca = new Calc();はそのままにして、 static class Calc のように宣言してstaticな内部クラスにしても質問のプログラムの範囲では動作するようになる。 この方法ではCalcクラスの宣言が変わるので他でCalcクラスが使用されているなら注意が必要。 <B>のCalcクラスの場合はTestクラスとは別の独立したクラスなのでそういったメンバに課せられる制約はない。
お礼
vaguechatさん、有り難うございました