2012-08-20 11 views
9

Czy zagnieżdżone klasy wewnętrzne ABar i BBar mają dostęp do zmiennych głównej klasy? Na przykład:Zagnieżdżone zagnieżdżone klasy wewnętrzne klasy zewnętrznej zmienne

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(); 

Edycja

Wydaje się, że kod wpisany będzie pracował jeśli bym spróbował go wcześniej; starał się uzyskać pomoc, nie będąc zbyt konkretnym. Kod mam rzeczywiście kłopoty z

zawodzi z powodu błędu „Nie można uczynić statycznych odniesienie do niestatyczny etapie pole”

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

Spróbowałeś? –

+1

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

+0

Nie próbowałem tego dokładnie tak, jak napisałem, ponieważ mój projekt jest oparty na Androidzie - ta sama logika, nie działa (nie załączając instancję Foo) 'Foo.this.i ++;' – TerryProbert

Odpowiedz

18

W kodzie, tak, to jest możliwe.

dla statycznych klas zagnieżdżonych (klasy wewnętrzne) mają dostęp do innych członków klasy okalającego, nawet jeśli są one uznane za prywatne. Klasa zagnieżdżona Static nie ma dostępu do innych elementów klasy otaczającej .

Patrz: Nested Classes

+3

powinieneś umieścić link do strony oracle, jeśli zamierzamy użyć bezpośrednich ofert. http://docs.oracle.com/javase/tutorial/java/javaOO/nested.html –

0

Jeśli wewnętrzna klasa rozszerza klasę zewnętrzną, to będzie mieć dostęp do klasy zewnętrzna członków publicznych i chronionych. Po prostu to zmęczyłem i zadziałało. Konstrukcja jest nieco dziwna, ponieważ implikuje pewien rodzaj nieskończonej pętli w definicji klasy, ale wydaje się, że wykonuje to zadanie.

Powiązane problemy