Java:嵌套方法本地内部类和可访问性

Java:嵌套方法本地内部类和可访问性,java,class,inner-classes,Java,Class,Inner Classes,我一直在尝试使用嵌套类的各种作用域技巧,发现了一个特别的案例 假设您有双重嵌套的本地类,如下所示: public class Outer { private final String className = "outer"; public Outer() {} public void doThings() { class Inner { private final String className = "inner";

我一直在尝试使用嵌套类的各种作用域技巧,发现了一个特别的案例

假设您有双重嵌套的本地类,如下所示:

public class Outer {
    private final String className = "outer";

    public Outer() {}

    public void doThings() {
        class Inner {
            private final String className = "inner";
            public Inner() {}
            public void doThings() {
                class InnerInner {
                    private final String className = "inner-inner";
                    public InnerInner() {}
                    public void doThings() {
                        System.out.println("Outer class: "+Outer.this.className);
                        // How to access the Inner member?
                        System.out.println("InnerInner class: "+this.className);
                    }
                }

                InnerInner ii = new InnerInner();
                ii.doThings();
            }
        }

        Inner i = new Inner();
        i.doThings();
    }

    public static void main(String args[]) {
        Outer o = new Outer();
        o.doThings();
    }
}
据我所知,内部类超出了内部类的范围。InnerInner是否可以看到它的调用实例?当然,使用
Outer.Inner.this.className
会失败,因为通过Outer无法看到Inner

顺便说一句,我确实意识到这是一个非常非传统和不恰当的java习惯用法,但我认为这是一个有趣的习惯用法,特别是要强调原型语言(如javascript)和OO语言(如java)中的范围链接之间的区别。

尝试以下方法-

System.out.println("Inner class: " + Inner.this.className);
你可以这样试试

 System.out.println("Inner class: " + Inner.this.className);