![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?e8efa67)
![](http://oshiete.xgoo.jp/images/v2/common/profile/M/noimageicon_setting_10.png?e8efa67)
javaを勉強しています。
MainFrameクラス内にPaintGraphクラスがあり、
PaintGraphクラス内でNodeクラスを作りました。
このNodeクラスのインスタンスを、MainFrame内(PaintGraphの外)で初期化したいのですが、エラーになります。
おそらく基本的なことだと思うのですが、
エラーの意味がわからず、どう修正して良いのかわかりません。
ご存知の方、ご教示いただけますようお願い致します。
anime.java:648:
MainFrame.PaintGraph.Node を含む囲うインスタンスが必要です。
dn1[i] = new PaintGraph.Node();
No.2ベストアンサー
- 回答日時:
まず、インスタンスメンバを扱うにはインスタンスが必要ということはわかりますよね?
class MyClass {
static void method1() { }
void method2() { }
public static void main(String[] args) {
MyClass.method1(); // OK
MyClass.method2(); // NG
MyClass m = new MyClass();
m.method2(); // OK
}
}
クラスも同じです。static でない内側クラスを扱うには外側クラスのインスタンスが必要です。
class Outer {
static class Inner1 { }
class Inner2 { }
public static void main(String[] args) {
new Outer.Inner1(); // OK
new Outer.Inner2(); // NG
Outer o = new Outer();
o.new Inner2(); // OK
}
}
要するに、内側クラスが static であるかないかというのは、メソッドが static であるかないかというのと同じく、大きな違いがあるのです。
今回の件ではまず内側クラスを static にするのかしないのかという点を再検討した方がいいと思われます。
再度のご回答、ありがとうございます。
つまり、
PaintGraph panel1 = new PaintGrapn();
に対して、
dn1[i] = new PaintGraph.Node();
ではなく、
dn1[i] = panel1.new Node();
と書けばよかったということですね。
(この書き方を知らず、
初めnew panel1.Node();と書いていました)
今回は、staticにすると都合が悪そうなので、
autoでの書き方がわかり、勉強になりました。
ありがとうございました。
No.1
- 回答日時:
クラスの中にクラスを入れる場合、内側のクラスが static であるかないかの違いが重要になってきますが、この点についてはどの程度理解していますか?
内側のクラスが static でない場合、内側クラスは外側クラスのインスタンスメンバになります。従って、内側クラスを扱うには外側クラスのインスタンスが必要ということになります。
ご回答ありがとうございます。
外側クラスのインスタンスとして、
PaintGraph panel1 = new PaintGrapn();
を作成し、
PaintGraph内の Node dn[]; に対して、
PaintGraph.Node dn1[] = panel1.dn;
とし、
その要素を初期化しようとしたのですが、
これのどこがまずいのでしょうか。
>クラスの中にクラスを入れる場合、内側のクラスが static であるかないかの違い
これについては、よくわかっていません。
classを作成せずに既存のプログラムを変更したりしていたものですから。。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Java JavaのSingletonパターンのprivateの持つ意味が分かりません。 5 2022/06/12 10:38
- その他(プログラミング・Web制作) どういうプログラムで組みますか?google colabでやってるんですけど、出来る方お願いします。 1 2022/07/17 18:41
- その他(プログラミング・Web制作) このプログラミングをどう組みますか? Googlecolabでやってるんですが、出来る方お願いします 1 2022/07/13 10:52
- その他(プログラミング・Web制作) どういうプログラムで組みますか?google colabでやってるんですけど、出来る方お願いします。 1 2022/07/06 09:28
- オープンソース Vue+Laravelのデザインテンプレートのサンプルが起動できない 1 2022/05/18 21:52
- Java java 飾子を付けること(public static・・・) ・コンソールへの出力処理はmainメ 2 2022/06/16 19:34
- Windows 10 IT初心者です! powershellで以下のようなエラーが出ました オブジェクト参照がオブジェクト 1 2023/05/17 11:30
- C言語・C++・C# このプログラミング誰か教えてくれませんか 1 2022/05/21 02:41
- 学校 親いないから家来て、どう断ればいい?どういう理由でなぜその子を誘うの? 9 2022/09/28 17:02
- Visual Basic(VBA) worksheetFunctionクラスのVlookupプロパティを取得できません エラーへの対応 3 2022/12/27 22:27
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
java eclipse 型に解決できません
-
UMLのクラス図はmain()も含むん...
-
配列の重複する値とその個数を...
-
どこからも呼ばれていない無意...
-
重複エラーを解決するには
-
IPアドレスのクラスAを取得して...
-
グローバルIPとプライベートIP...
-
3年間同じクラスになる確率
-
「天声人語」をインターネット...
-
河合塾のクラス分けについて
-
IPアドレスの3バイト目の呼び方
-
dllと同じプロジェクトにする方法
-
ドキュメントクラスの取得方法
-
[C++/CLI]可変個引数について
-
VB.netのコンテナークラスとは...
-
正規表現を使った小数入力チェ...
-
「囲うインスタンス」のエラー...
-
Eclipseを入れたら、Swingは使...
-
サーブレット実行時のエラー
-
EclipseでJSPのコンパイルエラー
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
配列の重複する値とその個数を...
-
「天声人語」をインターネット...
-
java eclipse 型に解決できません
-
グローバルIPとプライベートIP...
-
ポータブル電源を買おうと思う...
-
容姿について
-
自作のクラスファイルがインポ...
-
どこからも呼ばれていない無意...
-
UMLのクラス図はmain()も含むん...
-
同一パッケージにあるクラスが...
-
main()を持つクラスが2つ以上...
-
1 つのヘッダファイルに複数の...
-
アルキメデスの大戦の櫂はなぜ2...
-
dllと同じプロジェクトにする方法
-
IPアドレスの3バイト目の呼び方
-
3年間同じクラスになる確率
-
重複エラーを解決するには
-
同じパッケージ、クラス名が含...
-
コンボボックスのマウスホイー...
-
同じクラスにならない確率を教...
おすすめ情報