【问题标题】:use private to specify access control of a class使用 private 指定类的访问控制
【发布时间】:2015-02-19 07:22:22
【问题描述】:

这些天我一直在阅读 Bruce Eckel 的 Thinking in Java,当谈到访问控制一章时,它说如果一个 java 文件有两个或多个类,除了公共类,其他类不能是 private(即将使除班级以外的任何人都无法访问)或protected

但我看到很多流行的 java 库和开源项目确实使用 private 来装饰这类类。

那么是因为书太理论还是其他什么原因?

原文(第 231 页,第四版)

请注意,一个类不能是私有的(这会使除该类之外的任何人都无法访问它)或受保护的。所以类访问只有两种选择:包访问或公共访问。如果您不希望其他人访问该类,则可以将所有构造函数设为私有,从而防止除您之外的任何人在该类的静态成员中创建该类的对象。

【问题讨论】:

  • 我强烈怀疑您只是误读了这本书。
  • 我认为 CommonsWare 是对的,无论如何 private 和 protected 可以与内部类(类内的类)一起使用,但不能与不在任何类中的类一起使用
  • 这本书已经很旧了;你应该期望它已经过时了。与当前的 Java 相比,那段短文中有几个不准确之处。
  • 在那本书的第 3 版中,... or protected 后面有一个脚注标记。脚注文本:实际上,内部类可以是私有的或受保护的,但这是一种特殊情况。这些将在第 7 章中介绍

标签: java class private protected


【解决方案1】:

该语句仅适用于顶级(非嵌套)类。嵌套类可能是private。这是因为顶级类对私有嵌套类(包括嵌套类的私有成员)具有可见性,反之亦然。它们也可能是protected,这意味着封闭类的子类,即使在另一个包中,也可以引用它们。

请注意,这并不是声明多个顶级类的 Java 文件所独有的。 privateprotected 不允许出现在任何顶级类声明中。

【讨论】:

    猜你喜欢
    • 2018-08-20
    • 2021-05-29
    • 2011-06-01
    • 1970-01-01
    • 2010-11-22
    • 2016-01-05
    • 2016-04-08
    • 2014-01-03
    • 2015-01-04
    相关资源
    最近更新 更多