受保护和没有访问修饰符之间的区别[关闭]

Posted

技术标签:

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

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

【问题讨论】:

默认是包私有访问,受保护的包访问+所有子类,即使在其他包中!请通过this! 接口和注解的默认访问权限是public classenum的默认访问权限是包本地。 【参考方案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:

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

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

    访问正确,如 §6.6.2 所述。

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

【讨论】:

【参考方案3】:

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

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

【讨论】:

【参考方案4】:

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

更多详情请见java docs

【讨论】:

【参考方案5】:

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

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

For more details here is the oracle page about it.

【讨论】:

以上是关于受保护和没有访问修饰符之间的区别[关闭]的主要内容,如果未能解决你的问题,请参考以下文章

使用受保护的访问修饰符覆盖没有访问修饰符的方法

PHP面向对象访问(权限)的三个修饰符之间的区别

如何在私有和受保护的访问修饰符之间进行选择以封装基类和子类之间的成员?

Java自学-类和对象 访问修饰符

java命令行参数的默认访问修饰符是啥[关闭]

Java中受保护的访问修饰符