
今晩は、javaの初心者です。宜しく願いします。
下のようなコードを書いたら、「アクセス可能な型 C1 のエンクロージング・インスタンスが
ありません。
型 C1 のエンクロージング・インスタンスで割り振りを限定する必要があります
(たとえば x.new A() で、x は C1 のインスタンス)。」
とエラーが出ました。
eclipseでは、「C2 c_2 = new C2() ;」の箇所で赤いエラーマークが表示されています。
C1クラスとC2クラスを分けてやると正常に実行されます。
C1クラスの中にC2クラスを作ると文法的にどこがまずいのでしょうか。
あるクラスの中に別のクラスを書いているプログラムを見たような気もするのですが。
C1クラスとC2クラスをわかるのとはJAVA的に何がいけないのでしょうか。
原因がさっぱり分りません、宜しくお願いいたします。
=======================================================================
public class C1
{
int a = 9 ;
int b = 8 ;
int c = 7 ;
int d = 6 ;
//C2 c_2 ;
public void Calc1()
{
System.out.println("a+b= " + (a+b)) ;
}
public static void main(String[] args)
{
C2 c_2 = new C2() ;
c_2.Calc2() ;
C1 c_1 = new C1() ;
c_1.Calc1();
//c_1.Calc2();
}
class C2
{
//int c = 7 ;
//int d = 6 ;
public void Calc2()
{
System.out.println("c-d= " + (c-d)) ;
}
}
}
=========================================================================
A 回答 (7件)
- 最新から表示
- 回答順に表示
No.7
- 回答日時:
それか
C1 c_1 = new C1() ;
C2 c_2 = c_1.new C2() ;
と、c_1を先に宣言
なんにせよ、エラーメッセージは重要なヒントです。
自分で解決するにせよ、人に直してもらうにせよ、まずは、エラーメッセージの内容を確認することから始まります。
「エラーになった」だけじゃ、答えようがありません。
No.6
- 回答日時:
>c_2 = c_1.(new C2()) ;
>c_2 = new (c_1.(new C2()) ;
>
>その他色々試しましたが、全てエラーでした。
>冷やかしはやめて下さい。
それは、あなたの書き方が間違ってるから。
書くなら
c_2 = c_1.new C2();
c_2 = new C1().new C2();
だし。
No.5
- 回答日時:
冷やかす? 手元ではちゃんと動くんだがなぁ.
その「色々試した」ってのは, 具体的にはどうやった? そして, 「全てエラーでした」ってのは, それぞれに対してどんなエラーメッセージが出たんだ?
No.4
- 回答日時:
#3 です。
>C1のインスタンスメソッド中でやってないのが間違ってる。
すいません間違ってますね・・・
C1のインスタンスなしでやってるのが間違ってる。
が正しいですね。
No.3
- 回答日時:
>「new C2();」でインスタンス化をしてると考えているのですが、その考えはどこが間違っているのでしょうか。
C1のインスタンスメソッド中でやってないのが間違ってる。
以下がダメなのと同じ。
public Class C1 {
int a;
public static void main(String[] args) {
System.out.println("a=" + a);
}
}
No.2
- 回答日時:
詳細は「内部クラス」とか「インナークラス」とか「inner class」とかで調べてください.
#1 に書いたんだけど, 「new C2() でインスタンス化する」ためにはクラスC1 のインスタンスを必要とします. そして, 変数 c_1 にクラスC1 のインスタンスがあれば
c_1.new C2()
という形で「c_1 に付随する C2 のインスタンス」を作ることができます. このようにして作った C2 のインスタンスは, c_1 のメンバーに対し無条件に (アクセス指定を無視して) アクセス可能です.
c_2 = c_1.(new C2()) ;
c_2 = new (c_1.(new C2()) ;
その他色々試しましたが、全てエラーでした。
冷やかしはやめて下さい。
No.1
- 回答日時:
C2 は static じゃないから, クラスC2 のインスタンスを作るためにはクラスC1 のインスタンスが必要.
Tacosanさん、回答ありがとうございます。
C2クラスがC1クラスの中に入れ子見たいにあるのと、別クラスになるのとは文法的にどのように違う
のでしょうか。
「new C2();」でインスタンス化をしてると考えているのですが、その考えはどこが間違ってい
るのでしょうか。
また、クラスC2 のインスタンスを作るためにはクラスC1 のインスタンス化をしてやるのは、どの
ように具体的に書くのでしょうか。
宜しくお願いします
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
変数名の付け方
-
複数の変数を宣言する時、同時...
-
private static という変数の修飾
-
オブジェクト参照がオブジェク...
-
VB.NET getとsetの概念がわかり...
-
フィールドでのnewとコンストラ...
-
JSPでの表示
-
生成したインスタンスを削除す...
-
プログラミング、シューティン...
-
インスタンス参照でアクセスで...
-
抽象クラスのインスタンス生成...
-
インスタンスのハンドル
-
C# クラスのインスタンスについて
-
C#の構造体の開放のしかた
-
変数の参照でエラーが出てしま...
-
PHPExcel使用で2枚目のシートを...
-
「タイプ初期化子が例外をスロ...
-
エクセルVBAで、条件に一致する...
-
中学のクラス数
-
0歳児の指しゃぶりに関して
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
インスタンス参照でアクセスで...
-
変数名の付け方
-
private static という変数の修飾
-
C#において、同じインスタンス...
-
複数の変数を宣言する時、同時...
-
オブジェクト参照がオブジェク...
-
VB.NET getとsetの概念がわかり...
-
フォームの存在をチェックする方法
-
変数の参照でエラーが出てしま...
-
C# インスタンスの破棄
-
生成したインスタンスを削除す...
-
文字列を日付に変換でParseExce...
-
次の日本語の意味を教えて下さい
-
C#「オブジェクト参照が必要で...
-
SQLを連続発行する時の正しい(?...
-
「インスタンス」の意味をわか...
-
[Visual C#] 優先される処理に...
-
newしないインスタンス?実体化...
-
C#の構造体の開放のしかた
-
javaのクラスの作り方、エラー...
おすすめ情報