Java匿名类和可访问的私有变量

Jan*_*cia 5 java private inner-classes

interface Test {
public void test();
}

public class TestMain {
private String h = "AAA";

public static void main(String[] args) {
    TestMain t = new TestMain();
}

public TestMain() {
    Test t = new Test() {
        public void test()  {
            System.out.println( h );
        }
    };

    t.test();
}

}
Run Code Online (Sandbox Code Playgroud)

上述来源效果很好.

但我认为变量'h'应该无法从匿名类中访问.我需要知道它为什么运作良好.

感谢您提前的所有帮助!

Ern*_*ill 7

非静态内部类的每个实例都有一个封闭实例 - 外部类的一个实例,它通过存储在内部类对象中的引用变量绑定到它.通过该引用可用于内部类对象的封闭实例的所有成员.

当然,编译器负责添加引用变量,以及内部类对象可用于获取外部类对象的私有成员的一些特殊访问器函数.您可以通过使用反汇编外部类来查看这些访问器函数javap -c.