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

时间:2013-06-20 04:10:59

标签: 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 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();
    }
}

尽可能接近,类Inner超出了InnerInner类的范围。无论如何,InnerInner可以看到它的内部调用实例吗?当然,使用Outer.Inner.this.className会失败,因为通过Outer看不到Inner。

顺便说一句,我确实认识到这是一种非常规和不正当的java习惯用语,但我认为这一点非常有趣,特别是要强调原型语言(如javascript)和OO语言(如java)之间的区别链接。

2 个答案:

答案 0 :(得分:4)

尝试以下方法 -

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

答案 1 :(得分:1)

您可以尝试这样

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