• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:内部クラス?のエラー)

内部クラス?のエラー

このQ&Aのポイント
  • <A>と<B>のプログラムで内部クラスのエラーが発生します。
  • <A>の場合、内部クラスを含むクラスのエンクロージング・インスタンスが必要となります。
  • <B>の場合、内部クラスを別のクラスにすることでエラーが発生しません。

質問者が選んだベストアンサー

  • ベストアンサー
  • vaguechat
  • ベストアンサー率85% (47/55)
回答No.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クラスとは別の独立したクラスなのでそういったメンバに課せられる制約はない。

dikon_007
質問者

お礼

vaguechatさん、有り難うございました