【问题标题】:Difference between protected and having no access modifier [closed]受保护和没有访问修饰符之间的区别[关闭]
【发布时间】:2013-07-24 06:33:27
【问题描述】:

在Java中声明变量时,“受保护”和“无访问修饰符”有什么区别?是一样的吗?

【问题讨论】:

  • 默认是包私有访问,受保护的包访问+所有子类,即使在其他包中!请通过this
  • 接口和注解的默认访问权限是public classenum的默认访问权限是包本地。

标签: java variables public protected


【解决方案1】:

不一样。

protectedno access modifier 变量都可以在同一个包中访问,但是 protected 变量可以被任何地方的子类实例访问(在任何包装中)。

【讨论】:

  • 谢谢,这就是我一直在寻找的答案!
【解决方案2】:

通过Oracle tutorials

如果一个类没有修饰符(默认,也称为包私有),它只在自己的包中可见

protected 修饰符指定该成员只能在其自己的包中访问(与 package-private 一样),此外,它的类在另一个包中的子类也可以访问。

Modifier    | Class | Package | Subclass | World
————————————+———————+—————————+——————————+———————
public      |   Y   |    Y    |    Y     |   Y
————————————+———————+—————————+——————————+———————
protected   |   Y   |    Y    |    Y     |   N
————————————+———————+—————————+——————————+———————
no modifier |   Y   |    Y    |    N     |   N
————————————+———————+—————————+——————————+———————
private     |   Y   |    N    |    N     |   N

JLS 6.6:

如果成员或构造函数声明为受保护,则仅当满足以下条件之一时才允许访问:

  1. 对成员或构造函数的访问发生在包含声明受保护成员或构造函数的类的包内。

  2. 访问正确,如 §6.6.2 所述。

我们说有默认访问,只有当访问发生在声明类型的包内时才被允许。

【讨论】:

    【解决方案3】:

    没有访问修饰符被称为“包私有”:一个包中定义的所有类都可以访问同一个包中定义为“包私有”的所有内容。

    受保护意味着所有扩展定义受保护实例的类的类都可以访问该实例。

    【讨论】:

      【解决方案4】:

      它们不一样。如果没有指定访问修饰符,那么它是包私有的。

      更多详情请见java docs

      【讨论】:

        【解决方案5】:

        没有。默认值为包专用。这与受保护的略有不同。

        默认介于私有和受保护之间,没有私有严格,但比受保护严格。

        For more details here is the oracle page about it.

        【讨论】:

          猜你喜欢
          • 2020-02-21
          • 2010-12-03
          • 2013-03-05
          • 2015-02-11
          • 1970-01-01
          • 2019-02-21
          • 1970-01-01
          • 2015-11-27
          相关资源
          最近更新 更多