電子書籍の厳選無料作品が豊富!

javaを勉強しています。

MainFrameクラス内にPaintGraphクラスがあり、
PaintGraphクラス内でNodeクラスを作りました。
このNodeクラスのインスタンスを、MainFrame内(PaintGraphの外)で初期化したいのですが、エラーになります。

おそらく基本的なことだと思うのですが、
エラーの意味がわからず、どう修正して良いのかわかりません。
ご存知の方、ご教示いただけますようお願い致します。

anime.java:648:
MainFrame.PaintGraph.Node を含む囲うインスタンスが必要です。
dn1[i] = new PaintGraph.Node();

A 回答 (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 にするのかしないのかという点を再検討した方がいいと思われます。
    • good
    • 0
この回答へのお礼

再度のご回答、ありがとうございます。

つまり、
PaintGraph panel1 = new PaintGrapn();

に対して、

dn1[i] = new PaintGraph.Node();

ではなく、

dn1[i] = panel1.new Node();

と書けばよかったということですね。
(この書き方を知らず、
初めnew panel1.Node();と書いていました)

今回は、staticにすると都合が悪そうなので、
autoでの書き方がわかり、勉強になりました。

ありがとうございました。

お礼日時:2006/05/18 13:52

クラスの中にクラスを入れる場合、内側のクラスが static であるかないかの違いが重要になってきますが、この点についてはどの程度理解していますか?



内側のクラスが static でない場合、内側クラスは外側クラスのインスタンスメンバになります。従って、内側クラスを扱うには外側クラスのインスタンスが必要ということになります。
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます。

外側クラスのインスタンスとして、
PaintGraph panel1 = new PaintGrapn();
を作成し、

PaintGraph内の Node dn[]; に対して、

PaintGraph.Node dn1[] = panel1.dn;

とし、
その要素を初期化しようとしたのですが、
これのどこがまずいのでしょうか。

>クラスの中にクラスを入れる場合、内側のクラスが static であるかないかの違い

これについては、よくわかっていません。
classを作成せずに既存のプログラムを変更したりしていたものですから。。

お礼日時:2006/05/17 16:26

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!