2013-08-22 33 views
6

我喜欢使用任何语言的访问控制,但是我发现在Java中我几乎从不使用访问控制(如果有的话)使用package-private访问控制(或缺乏)。我什么时候可以在Java中使用package-private?

我知道内部类可以是privateprotected,或package-private,但外类只能是package-privatepublic。为什么外部班级可能是package-private而不是protected?限制整个程序包可以看到的类/方法/字段有什么好处,但不能是子类?

回答

13

我使用package-private类和方法,当我想隐藏来自包外的用户(和其他类)的实现细节。

例如,如果我有一个接口和一个创建该接口实例的工厂类,我可能会将实现类作为一个单独的文件,但将其标记为package-private,以使其他人无法使用它,也不会混淆JavaDoc(如果javadoc设置为只显示公共)。

如果您密封了jar文件,package-private方法也可以帮助限制谁可以访问这些方法。如果某个方法是公共的或受保护的,则子类仍然可以看到并调用该方法,即使它位于不同的包中。 (非密封瓶子允许任何人在你的包装中制作课程,以便他们可以访问包装专用或受保护的方法)

2

在许多情况下,同一包装中的同级类具有相同的作者,因此他知道内在方式这些类工作,或者换句话说,他知道这些类的封装逻辑。因此,他可以确保类之间的包 - 私有访问遵循被访问类的封装逻辑,并且这些访问不会破坏任何内容。

这些直接访问通常用于优化和保持较小的源代码量。

对于为什么外层类可能是包私有,但没有保护的问题部分,我没有答案。

相关问题