Java内部类访问和最佳实践

现在已经很晚了,所以我很难记住它是如何工作的。

我知道一个Inner类可以访问外类中的所有内容(因为它是该类的成员)但是反过来呢?

1)外类是否可以访问内部类中的私有变量和方法?

2)我看过文章提到内部类应该是私有的,这样它们只能被外部类访问。 这对内部类的可访问性有什么影响?

3)在内部类中处理访问级别的最佳实践是什么? 我假设封装越多越好,但这是以牺牲可访问性为代价的吗?

谢谢!

Effective Java(第2版)第22项:“非静态的静态成员类”对此主题进行了详细介绍。

简要总结:

  1. 除非需要访问,否则内部类不应该访问外部类实例,即默认情况下内部类应该是静态的。 编辑:为了获得技术,有效Java调用这些静态成员类 ,而不是内部类 ,并使用术语嵌套类来包含静态和非静态版本。
  2. 外部类总是可以访问其内部类的成员,即使这些成员是私有的。 通过这种方式,内部类只能将自身暴露给它的外部类。
  3. “内部阶级应该只为服务其外层阶级而存在。”

就个人而言,我倾向于实现内部类,只要这样做允许内部类的构造函数是私有的,即当一个类只能从另一个(外部)类实例化时。 任何额外的封装,例如使整个内部类私有,是可取的; 但公共内部课程是完全可以接受的。 Java中有很多例子,比如AbstractMap.SimpleEntry。