受保护和无访问修饰符之间的区别

时间:2013-07-24 16:33:45

标签: java variables public protected

在Java中声明变量时,“protected”和“no access modifier”之间有什么区别?它是一样的吗?

5 个答案:

答案 0 :(得分:15)

不一样。

受保护无访问修饰符变量都可以在同一个包中访问,但受保护的变量可以由子类实例访问任何位置(在任何包装中。)

答案 1 :(得分:6)

浏览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.   
  3. 访问是正确的,如§6.6.2。

  4. 中所述         

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

答案 2 :(得分:4)

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

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

答案 3 :(得分:0)

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

更多详情可在java docs

中找到

答案 4 :(得分:0)

没有。默认是包私有。这与保护略有不同。

默认值介于private和protected之间,不如private严格,但比protected更严格。

For more details here is the oracle page about it.