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);