我目前正在阅读Joshua Bloch的Effective Java,我喜欢它!但在第112页(第24项)布洛赫写道:
静态成员类是最简单的嵌套类.最好将其视为普通类,恰好在另一个类中声明,并且可以访问所有封闭类的成员,甚至是那些声明为private的成员.
这真让我困惑.我宁愿说:
静态成员类是最简单的嵌套类.它最好被认为是一个普通的类,碰巧在另一个类中声明,并且可以访问所有封闭类的静态成员,甚至是那些声明为private的成员.
这是一个片段,说明了我对引用的理解:
public class OuterClass {
public void printMessage(String message) {
System.out.println(message);
}
private static class InnerClass {
public void sayHello() {
printMessage("Hello world!"); //error: Cannot make a static reference to the non-static method printMessage(String)
}
}
}
Run Code Online (Sandbox Code Playgroud)
您可以看到InnerClass的sayHello方法无法访问OuterClass的printMessage方法,因为它是在静态内部类中声明的,而printMessage方法是一个实例方法.看起来作者似乎建议静态成员类可以访问封闭类的非静态字段.我确信我在他的最后一句话中误解了一些内容,但我无法弄清楚是什么.任何帮助将不胜感激!
编辑:我改变了两种方法的可见性,因为它与我的问题无关.我对静态成员感兴趣,而不是私人成员.