我知道内部类可以访问外部类中的所有内容(因为它是该类的成员)但是反过来呢?
外部类是否可以访问内部类中的私有变量和方法?
我看过文章提到内部类应该是私有的,这样它们只能被外部类访问。这对内部类的可访问性有什么影响?
在内部课程中处理访问级别的最佳做法是什么?我假设封装越多越好,但这会以牺牲可访问性为代价吗?
答案 0 :(得分:15)
Effective Java(第2版)第22项:“赞成非静态的静态成员类”详细介绍了这个主题。
简要总结:
static
。为了获得技术,Effective Java调用这些静态成员类,而不是内部类,并使用术语嵌套类来包含静态和非静态版本。private
。通过这种方式,内部类只能将自身暴露给它的外部类。就个人而言,我倾向于实现内部类,只要这样做允许内部类的构造函数为private
,即当一个类只能从另一个(外部)类实例化时。任何额外的封装,例如制作整个内部类private
,都是可取的;但是public
内部类是完全可以接受的。 Java中有许多示例,例如AbstractMap.SimpleEntry
。