【发布时间】:2013-07-24 06:33:27
【问题描述】:
在Java中声明变量时,“受保护”和“无访问修饰符”有什么区别?是一样的吗?
【问题讨论】:
-
默认是包私有访问,受保护的包访问+所有子类,即使在其他包中!请通过this!
-
接口和注解的默认访问权限是
publicclass和enum的默认访问权限是包本地。
标签: java variables public protected
在Java中声明变量时,“受保护”和“无访问修饰符”有什么区别?是一样的吗?
【问题讨论】:
public class和enum的默认访问权限是包本地。
标签: java variables public protected
protected 和 no access modifier 变量都可以在同一个包中访问,但是 protected 变量可以被任何地方的子类实例访问(在任何包装中)。
【讨论】:
如果一个类没有修饰符(默认,也称为包私有),它只在自己的包中可见
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
如果成员或构造函数声明为受保护,则仅当满足以下条件之一时才允许访问:
对成员或构造函数的访问发生在包含声明受保护成员或构造函数的类的包内。
访问正确,如 §6.6.2 所述。
我们说有默认访问,只有当访问发生在声明类型的包内时才被允许。
【讨论】:
没有访问修饰符被称为“包私有”:一个包中定义的所有类都可以访问同一个包中定义为“包私有”的所有内容。
受保护意味着所有扩展定义受保护实例的类的类都可以访问该实例。
【讨论】:
它们不一样。如果没有指定访问修饰符,那么它是包私有的。
更多详情请见java docs
【讨论】:
没有。默认值为包专用。这与受保护的略有不同。
默认介于私有和受保护之间,没有私有严格,但比受保护严格。
【讨论】: