Java嵌套内部类访问外部类变量

时间:2012-08-20 17:55:07

标签: java android opengl-es

嵌套的内部类ABar和BBar是否可以访问主类的变量?例如:

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;
    }

2 个答案:

答案 0 :(得分:18)

在您的代码中,是的,这是可能的。

  

非静态嵌套类(内部类)可以访问其他成员   封闭类的,即使它们被宣布为私有。静态的   嵌套类无权访问封闭的其他成员   类。

请参阅:Nested Classes

答案 1 :(得分:0)

如果您的内部类扩展了外部类,那么它将可以访问外部类public和protected成员。我只是厌倦了它并且它起作用了。该构造有点奇怪,因为它暗示了类定义中的一种无限循环,但似乎可以完成这项工作。