有效的Java(第2版)第22项:“相对于非静态的较喜欢的静态成员类”更详细地介绍了此主题。
简要总结:
- 除非需要访问,否则内部类不应有权访问外部类实例,即内部类应
static
默认为。为了获得技术,Effective Java调用了这些 静态成员类 ,而不是 内部类 ,并使用术语 嵌套类 来涵盖静态和非静态版本。 - 外部类始终有权访问其内部类的成员,即使这些成员是
private
。这样,内部类只能将自身暴露给外部类。 - “内部阶级应该只为服务外部阶级而存在。”
就个人而言,我倾向于实现一个内部类,只要这样做允许内部类的构造函数为
private,即当一个类只能从另一个(外部)类实例化时。任何其他封装,例如使整个内部类
private都可以使用;但是
public内部类是完全可以接受的。Java中有很多示例,例如
AbstractMap.SimpleEntry。



