它们是 内部 (嵌套的非静态)类:
public class Outer { public class Inner { public void foo() { ... } }}你可以做:
Outer outer = new Outer();outer.new Inner().foo();
或者简单地:
new Outer().new Inner().foo();
这样做的原因是
Inner引用了外部类的特定实例。让我给你一个更详细的例子:
public class Outer { private final String message; Outer(String message) { this.message = message; } public class Inner { private final String message; public Inner(String message) { this.message = message; } public void foo() { System.out.printf("%s %s%n", Outer.this.message, message); } }}并运行:
new Outer("Hello").new Inner("World").foo();输出:
Hello World
注意: 嵌套类也可以
static。如果是这样,则它们没有
this对外部类的隐式引用:
public class Outer { public static class Nested { public void foo() { System.out.println("Foo"); } }}new Outer.Nested.foo();静态嵌套类经常
private会成为实现细节,并且是封装问题的一部分而又不污染公共名称空间的一种巧妙方法,通常如此。



