2012-08-20 24 views
9

ネストされた内部クラスABarとBBarは、メインクラスの変数にアクセスできますか?たとえば、次のようにJavaネストされた内部クラスのアクセス外部クラス変数

public class Foo { 
    public ABar abar = new ABar(); 
    public BBar bbar = new BBar(); 
    public int someCounter = 0; 

    public class ABar { 
     public int i = 0; 
     public void someMethod(){ 
      i++; 
      someCounter++; 
     } 
    } 

    public class BBar { 
     public void anotherMethod(){ 
      bbar.someMethod(); 
      someCounter++; 
     } 
    } 
} 
// then called using: // 
Foo myFoo = new Foo(); 
myFoo.bbar.anotherMethod(); 

編集

私が最初にそれを試してみましたたければ、私は入力したコードが働いていたようです。あまりにも具体的でなくても助けを求めようとしていた。

と私は実際に悩み抱えているコードは、あなたのコードでは

public class Engine { 
    public Stage stage = new Stage(); 
     // ... 
    public class Renderer implements GLSurfaceView.Renderer { 
     // ... 
     @Override 
     public void onDrawFrame(GL10 gl) { 
      stage.alpha++; 
     } 
    } 

    public class Stage extends MovieClip { 
     public float alpha = 0f; 
    } 
+12

試しましたか? –

+1

http://docs.oracle.com/javase/tutorial/java/javaOO/nested.html –

+0

私のプロジェクトはアンドロイドに基づいているため、入力したとおりに試したことはありません - 同じロジックです。 Fooのインスタンスを囲む) 'Foo.this.i ++;' – TerryProbert

答えて

18

「非静的フィールドのステージへの静的参照することはできません」エラーのため失敗し、はい、それは可能です。

非静的な入れ子になったクラス(インナークラス)は、それらがプライベートで宣言されている場合でも、包含するクラスの他のメンバー へのアクセス権を持っています。静的 ネストされたクラスは、同封の クラスの他のメンバーにアクセスできません。

参照:Nested Classes

+3

oracleサイトへのリンクを含める必要があります。直接引用符を使用する予定です。 http://docs.oracle.com/javase/tutorial/java/javaOO/nested.html –

0

あなたの内部クラスは、外部クラスを拡張する場合、それは外部クラスpublicおよびprotectedメンバーにアクセスできるようになります。私はちょうどそれを疲れて、それは働いた。この構造体は少し奇妙です。なぜなら、それはクラス定義に無限ループの一種を含意しているからです。しかし、それは仕事をするようです。

関連する問題