【问题标题】:When would I use package-private in Java? [duplicate]我什么时候在 Java 中使用包私有? [复制]
【发布时间】:2013-08-25 07:56:11
【问题描述】:

我喜欢任何语言的访问控制,但我发现在 Java 中我几乎从不(如果有的话)使用package-private 访问修饰符(或不使用)。

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

【问题讨论】:

    标签: java private protected access-control package-private


    【解决方案1】:

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

    例如,如果我有一个接口和一个创建该接口实例的工厂类,我可能将实现类作为一个单独的文件,但将其标记为包私有,这样其他人就不能使用它,也不会弄乱 JavaDoc (如果 javadoc 设置为仅显示公共)。

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

    【讨论】:

      【解决方案2】:

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

      这些直接访问通常对优化和减少源代码量很有用。

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

      【讨论】:

        猜你喜欢
        • 2013-01-20
        • 2013-10-19
        • 2011-06-10
        • 2014-03-27
        • 2016-12-01
        • 2016-12-19
        • 2010-09-11
        • 2013-08-08
        • 2019-01-08
        相关资源
        最近更新 更多