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

10

内部嵌套类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();

编辑

似乎我输入的代码如果先尝试就可以工作了;我试图在不太具体的情况下寻求帮助。我实际遇到问题的代码失败了,因为出现了“无法对非静态字段 stage 进行静态引用”的错误。

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
你试过了吗? - Jon Skeet
1
http://docs.oracle.com/javase/tutorial/java/javaOO/nested.html - Colin D
1
真的吗?测试这个让你困扰了吗?这不是一个建设性的问题。 - nullpotent
1
似乎在这里发布比测试更困难。 - Gus
你的 BBar 缺少 "extends ABar" 吗? - Gus
显示剩余2条评论
2个回答

19

在你的代码中,是可以实现的。

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

参见:嵌套类


3
如果您打算使用直接引用,就应该包含指向Oracle网站的链接。http://docs.oracle.com/javase/tutorial/java/javaOO/nested.html - Colin D

0
如果您的内部类扩展了外部类,则它将可以访问外部类的公共和受保护成员。我刚刚尝试了一下,它确实有效。构造有点奇怪,因为它暗示了类定义中的一种无限循环,但似乎它能够完成工作。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接