我什么时候在Java中使用package-private?

Nob*_*ift 6 java private protected access-control package-private

我喜欢任何语言的访问控制,但我发现在Java中我几乎从不(如果曾经)使用包私有访问修饰符(或缺少它).

我意识到内部类可以是private,protected或者package-private,但外部类只能是package-privatepublic.外行为什么可以package-private但不是protected?限制整个包可以看到的类/方法/字段有什么好处,而不是子类?

dka*_*zel 13

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

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

如果密封jar文件,package-private方法也可以帮助限制谁可以访问这些方法.如果方法是公共的或受保护的,则子类仍然可以查看并调用该方法,即使它位于不同的包中.(未密封的jar允许任何人在你的包中创建类,以便他们可以访问包私有或受保护的方法)