Java内部类访问和最佳实践

Dan*_*anK 10 java oop inner-classes

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

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

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

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

jac*_*646 15

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

简要总结:

  1. 内部类不应该访问外部类实例,除非需要访问,即内部类应该是static默认的.为了获得技术,Effective Java调用这些静态成员类而不是内部类,并使用术语嵌套类来包含静态和非静态版本.
  2. 外部类总是可以访问其内部类的成员,即使这些成员是private.这样,内部类只能将自己暴露给它的外部类.
  3. "内部阶级应该只为服务其外部阶级而存在."

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

  • 重新'有效的Java'.如果你还没有读过它,你应该 - 我读过的关于Java的最好的书.(但不是教程或介绍.) (2认同)