10

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

4

5 回答 5

18

不一样。

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

于 2013-07-24T16:40:52.417 回答
6

阅读Oracle 教程

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

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

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

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

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

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

于 2013-07-24T16:43:38.857 回答
4

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

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

于 2013-07-24T16:36:28.550 回答
0

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

更多细节可以在java 文档中找到

于 2013-07-24T16:35:20.853 回答
0

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

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

有关更多详细信息,请参阅有关它的 oracle 页面。

于 2013-07-24T16:36:08.513 回答