Java 内部类访问和最佳实践

2022-09-03 01:07:31

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

  1. 外部类是否有权访问内部类中的私有变量和方法?

  2. 我看到过一些文章提到内部类应该是私有的,以便它们只能由外部类访问。这对该内部类的可访问性有何影响?

  3. 当涉及到您的内部类时,处理访问级别的最佳实践是什么?我假设封装越多越好,但这是否会以牺牲可访问性为代价?


答案 1

Effective Java(第 2 版)第 22 项“优先使用静态成员类而不是非静态类”对本主题进行了详细介绍。

简要总结:

  1. 内部类不应有权访问外部类实例,除非需要该访问权限,即默认情况下内部类应具有访问权限。为了获得技术,Effective Java 调用这些静态成员类,而不是内部类,并使用术语嵌套类来包含静态和非静态版本。static
  2. 外部类始终有权访问其内部类的成员,即使这些成员是 。通过这种方式,内部类只能向其外部类公开自身。private
  3. “一个内部类应该只是为了服务于它的外部类而存在。

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


答案 2