
内部クラス?のエラー
今晩は、JAVA初心者です、宜しくお願い致します。
下のようなプログラムを書いてやりました。
<A>のように全体のプログラムを1つのクラスの中に別のクラスを入れる(内部クラス?)と、
「アクセス可能な型Testのエンクロージング・インスタンスがありません。
型Testのエンクロージング・インスタンスで割り振りを限定する必要があります。
(例えばx.new A()でxはテストのインスタンス)」というエラーがでます。
しかし、<B>のように別のクラスにすると、エラーは出ません。
この原因がよくわかりません。
====================================================================
<A>
public class Test
{
public static void main(String args[])
{
Calc ca = new Calc();
ca.calcTest(1,2);
}
class Calc
{
void calcTest(int a , int b )
{
int c = a + b ;
System.out.print("a + b = " + c);
}
}
}
====================================================================
<B>
public class Test
{
public static void main(String args[])
{
Calc ca = new Calc();
ca.calcTest(1,2);
}
}
class Calc
{
void calcTest(int a , int b )
{
int c = a + b ;
System.out.print("a + b = " + c);
}
}
====================================================================
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クラスとは別の独立したクラスなのでそういったメンバに課せられる制約はない。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Java Java プログラム public class Main { public static void 3 2023/08/10 23:46
- Java java 入力 3 4 3 出力 ABC DEFG HIJ このようなプログラムの書き方を教えてくだ 2 2022/07/15 14:18
- Java java final 1 2022/06/10 22:49
- Ruby 【JAVA】数字をひし形に出力するプログラムについて 2 2022/07/11 23:32
- Java javaでのプログラム(配列)について質問です. 2 2022/10/14 22:27
- Java 直し方について教えて頂きたいです。 4 2022/08/13 02:11
- Java JavaのSingletonパターンのprivateの持つ意味が分かりません。 5 2022/06/12 10:38
- C言語・C++・C# 大量のデータを読み込んで表示する速度を改善したい 8 2023/05/07 13:29
- C言語・C++・C# C# DatagridviewにExcelシートを反映するとエラーが出る 2 2023/05/06 17:12
- Java Java 配列<選挙> 4 2023/07/31 15:07
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
中学生です。 私は教室の黒板に...
-
恋愛
-
重複エラーを解決するには
-
定数はどこでまとめますか?
-
Lsit<LabelValueBean>について
-
コンボボックスのマウスホイー...
-
クラスについて。
-
同一パッケージにあるクラスが...
-
「隣の芝生は青く見える」現象...
-
小学4年の頃、好きな同級生にス...
-
JSPでclassのimport
-
10日でおぼえるC++がない?!
-
Sub-LVDS規格とは
-
共通で使う関数を集めたクラス...
-
ネスカフェ エクセラ と UCCク...
-
VisualC++6で、ソースのよく利...
-
そんなにお金がなくても年に1度...
-
女子高に通ってます。 私のクラ...
-
Eclipseでのクラス作成について
-
BSアンテナのサイズ(札幌)に...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
同じクラスにならない確率を教...
-
配列の重複する値とその個数を...
-
java eclipse 型に解決できません
-
3年間同じクラスになる確率
-
どこからも呼ばれていない無意...
-
共通で使う関数を集めたクラス...
-
ページ遷移時にアコーディオン...
-
同じパッケージ、クラス名が含...
-
IPアドレスの3バイト目の呼び方
-
同一パッケージにあるクラスが...
-
EclipseでJSPのコンパイルエラー
-
コンボボックスのマウスホイー...
-
Cstring(日本語含む)をcharに...
-
dllと同じプロジェクトにする方法
-
VBAもしくはVB6:クラスの中で...
-
main()を持つクラスが2つ以上...
-
複数のクラスで共通した関数を...
-
重複エラーを解決するには
-
string formatについて
-
UMLのクラス図はmain()も含むん...
おすすめ情報