2011-10-22 11 views
3

から内部クラスのオブジェクトをインスタンス化し、次は、Javaで有効な場合、私は疑問に思って:は、現在の外部クラスのオブジェクト

class OuterClass { 

    OuterClass(param1, param2) { 
     ...some initialization code... 
    } 

    void do { 
     // Here is where the doubt lays 
     OuterClass.InnerClass ic = this.new InnerClass(); 
    } 

    class InnerClass { 

    } 

} 

基本的に私がここで達成しようとしています何の現在のインスタンスから内部クラスのオブジェクトをインスタンス化することです外部クラス、新しいインスタンスではなく、現在のインスタンス。これは、外部クラスのコンストラクタが空ではなく(パラメータを取る)、それらに渡すものがわからない場合(nullではない場合があります。内部クラスオブジェクト)。

私が自分自身をうまく説明してくれたら教えてください。

ありがとうございます!

+0

私は 'OuterClass'のインスタンスごとに' InnerClass'のインスタンスを初期化しようとしていますか?なぜあなたはc'torで、あるいは 'getInnerClass()'メソッドを使ってそれを行うことができませんか? – amit

+0

まあ、はい...外部クラスがインスタンス化されるたびに、内部クラスオブジェクトもインスタンス化されますが、私はその内部クラスオブジェクトを外部オブジェクトのインスタンスからインスタンス化する必要があります。 – romeroqj

+0

すべての内部クラスは、 'static'と定義されていない限り、外部クラスに '接続'されており、それなしでインスタンス化することはできません。 – amit

答えて

7

public class OuterClass { 

    OuterClass() { 
     // ...some initialization code... 
    } 

    void doSomething() { 
     OuterClass.InnerClass ic = this.new InnerClass(); 
    } 

    class InnerClass { 

    } 

あなたは明示的なOuterClass識別子も、彼らが暗示している。このようにする必要はありません。

だから、これは不要です。

OuterClass.InnerClass ic = this.new InnerClass(); 

そして、これはインスタンスメソッドの内部で結構です:あなたは、静的メソッドでInnerClassのオブジェクトを作成する場合

InnerClass ic = new InnerClass(); 

物事はかかわらdicier取得OuterClassの内部に保持されているメインなど)。これは

public class OuterClass { 
    public static void main(String[] args) { 
     InnerClass otherInnerVar = new InnerClass(); // won't work 
    } 

を動作しません

しかし、これは正常に動作します:そこには、より明示的に指定する必要があります

public class OuterClass { 
    public static void main(String[] args) { 
     InnerClass otherInnerVar2 = new OuterClass().new InnerClass(); // will work 
    } 
+0

ありがとう!内部クラスから外部クラス変数にアクセスしたい場合でも、InnerClass ic = new InnerClass()を実行できますか? – romeroqj

+0

@horhay(jorje?):試してみてください!これはJavaコンパイラのためのものです。あなた自身のプログラミングラボです。 –

+0

はい、ホルヘ!ありがとうHFOE! – romeroqj

2

内部クラスのすべてのインスタンスを、クラスでない限り、 staticと宣言され、インスタンス化されるためには、外部クラスの 'connected'インスタンスが必要です。これは動作しません

public class Outer { 
    public class Inner { 
    } 
    public static void main(String[] args) { 
     Inner inner = new Inner(); //compilation error 
    } 
} 

をしかし、これは動作しますstaticキーワードが使用されているので、それは、Outerのインスタンスを必要としません:

public class Outer { 
    public static class Inner { 
    } 
    public static void main(String[] args) { 
     Inner inner = new Inner(); 
    } 
} 

の詳細情報を: java inner classes

0

上記は、外部クラスと外部外部クラスの内部クラスオブジェクトを作成する例です。

public class OuterClass { 

public class InnerClass{ 

    public void myMethod(){ 
     System.out.println("inside inner class"); 
    } 
} 

public void myMethod(){ 
    System.out.println("outer class method"); 
    InnerClass class1 = new InnerClass(); 
    class1.myMethod(); 
} 

public static void main(String[] args){ 
    //OuterClass.InnerClass class1 = new OuterClass().i 
    OuterClass outerClassObj = new OuterClass(); 
    OuterClass.InnerClass innerClassObj = outerClassObj.new InnerClass(); 
    innerClassObj.myMethod(); 
} 
}