2017-03-21 19 views
-1

は、私は内部クラスにいくつかのパラメータを設定する必要がありますが、私は例外を取得しています:タイプの 違法囲むインスタンス仕様OuterClass.InnerClass "OC上 。新しいInnerClass()初期化静的内部クラス

OuterClass oc = new OuterClass(); 
OuterClass.InnerClass rc2 = oc.new InnerClass(); 

内部クラスは、具体的に静的な内部クラスに読んだ後、私は使用してそれをインスタンス化することができます

OuterClass.InnerClass myInnerClass = new OuterClass.InnerClass(); 
myInnerClass.setName("John"); 

私の質問は、私は私がOuterClassオブジェクトをインスタンス化したことがありません

MyParentClass parentClass = new MyParentClass(); parentClass.setOuterClassObject(outerClassObject) を達成するにはどうすればよいです。

基本的に私はMyParentClass上(innerClass変数を持つ)人口outerClassを設定したいです。

+3

静的内部クラス*には、*外部クラスオブジェクトはありません。それは静的な意味です。私はあなたが達成したいことをよく理解していません。 – Boann

答えて

0

InnerClassのスコープはOuterClassです。 OuterClassのメソッドの内部でアクセスすることができます。この場合、他のクラスからクラスのインスタンスを作成するだけです。

public class OuterClass 
{ 
    class InnerClass 
    { 
    public InnerClass() { super(); }; 
    public bar() {}; 
    } 

    private void foo() 
    { 
    InnerClass aic = new InnerClass(); 
    aic.bar(); 
    } 

} 

ネストされたクラスは、その囲むクラスのメンバーです。静的でないネストされたクラス(内部クラス)は、それらがプライベート宣言されていても、囲むクラスの他のメンバーにアクセスできます。静的なネストされたクラスは、囲むクラスの他のメンバーにアクセスすることはできません。 OuterClassのメンバーとして、ネストされたクラスはprivate、public、protected、またはpackage privateとして宣言できます。 (外側のクラスは唯一の公共宣言することができることを思い出してくださいまたはプライベートパッケージ化します。)OuterClassの外InnerClassにアクセスする方法はありません

public class OuterClass 
{ 
    private class NonStaticInnerClass 
    { 
    public bar() { foo(); }; 
    } 

    private static class StaticInnerClass 
    { 
    public bar() { foo(); }; // Compiler error!!! 
    } 

    private void foo() {} ; 
} 

(それが定義されていません)がありますが、インターフェイスとしてそれにアクセスすることができます

public interface IInterface 
{ 
    public void bar(); 
} 

public class OuterClass 
{ 
    class InnerClass implemets IInterface 
    { 
    public InnerClass() { super(); }; 
    public void bar(); 
    } 

    private InnerClass ic; 

    public IInterface getIInterface() { return ic; }; 
} 

public class AnotherClass 
{ 
    private OuterClass oc; 

    public foo() 
    { 
    IInterface iI = oc.getIInterface(); 
    iI.bar(); 
    } 
} 
関連する問題