我啥时候在 Java 中使用包私有? [复制]
Posted
技术标签:
【中文标题】我啥时候在 Java 中使用包私有? [复制]【英文标题】:When would I use package-private in Java? [duplicate]我什么时候在 Java 中使用包私有? [复制] 【发布时间】:2013-08-25 07:56:11 【问题描述】:我喜欢任何语言的访问控制,但我发现在 Java 中我几乎从不(如果有的话)使用package-private 访问修饰符(或不使用)。
我意识到内部类可以是private
、protected
或package-private
,但外部类只能是package-private
或public
。为什么外部类可以是package-private
而不是protected
?限制类/方法/字段只能被整个包看到,而不是子类有什么好处?
【问题讨论】:
【参考方案1】:当我想对包外的用户(和其他类)隐藏实现细节时,我使用package-private
类和方法。
例如,如果我有一个接口和一个创建该接口实例的工厂类,我可能将实现类作为一个单独的文件,但将其标记为包私有,这样其他人就不能使用它,也不会弄乱 JavaDoc (如果 javadoc 设置为仅显示公共)。
如果你密封你的 jar 文件,包私有方法也可以帮助限制谁可以访问这些方法。如果一个方法是公共的或受保护的,即使它在不同的包中,子类仍然可以看到和调用该方法。 (未密封的 jar 允许任何人在您的包中创建类,以便他们可以访问包私有或受保护的方法)
【讨论】:
【参考方案2】:在许多情况下,同一个包中的对等类具有相同的作者,因此他知道这些类的内部工作方式,或者换句话说,他知道这些类的封装逻辑。因此,他可以确保类之间的包私有访问遵循被访问类的封装逻辑,并且这些访问不会破坏任何内容。
这些直接访问通常对优化和减少源代码量很有用。
对于为什么外部类可能是包私有但不受保护的问题部分,我没有答案。
【讨论】:
以上是关于我啥时候在 Java 中使用包私有? [复制]的主要内容,如果未能解决你的问题,请参考以下文章
在 Java 中,在内存方面,使用私有与公共是不是有区别? [复制]
在Java中,如果这样写,为啥私有数据成员可以在类外部访问? [复制]