2012-08-20 15 views
9

¿Es posible que las clases internas anidadas ABar y BBar accedan a las variables de la clase principal? Por ejemplo:variables de clases externas de clase interna anidadas en 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(); 

Editar

Parece que el código que he escrito hubiera funcionado si hubiera intentado en primer lugar; estaba tratando de obtener ayuda sin ser demasiado específico. El código realidad estoy teniendo problemas con

se produce un error debido al error 'no se puede hacer referencia estática a la fase de campo no estático'

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

¿Lo intentó? –

+1

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

+0

No lo he probado exactamente como mecanografiado, porque mi proyecto está basado en Android, la misma lógica, no funciona (no adjuntando la instancia de Foo) 'Foo.this.i ++;' – TerryProbert

Respuesta

18

En su código, sí, es posible.

clases anidadas no estáticos (clases internas) tienen acceso a otros miembros de la clase envolvente, incluso si se declaran privado. Las clases anidadas anidados no tienen acceso a otros miembros de la clase adjunta.

Ver: Nested Classes

+3

debe incluir el enlace al sitio de Oracle si van a usar citas directas. http://docs.oracle.com/javase/tutorial/java/javaOO/nested.html –

0

Si su clase interna se extiende la clase externa, entonces se tendrá acceso a los miembros públicos y protegidos de la clase externa. Simplemente lo cansé y funcionó. La construcción es un poco extraña, porque implica una especie de ciclo infinito en la definición de la clase, pero parece hacer el trabajo.

Cuestiones relacionadas