2013-06-20 67 views
2

我一直在尝试使用嵌套类的各种范围诀窍,并发现一个特定的情况下我难住。Java:嵌套方法本地内部类和可访问性

假设你有双重嵌套局部类像这样:

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类的范围。无论如何,InnerInner可以看到它的内部调用实例吗?当然,使用Outer.Inner.this.className会失败,因为内部通过Outer不可见。另一方面,我确实意识到这是一个非常规且不恰当的java成语,但我认为这很有趣,特别是突出了原型语言(如JavaScript)和OO语言(如Java)之间的范围链接之间的区别。

回答

4

请尝试以下 -

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

哇,这么简单 - 我应该考虑到! –

1

你可以尝试这样的

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