1Z0-808 OCA考试package private与封装、不可变类相关问题咨询
OCA Java SE 8 1Z0-808 考题疑问解答
原题回顾
以下说法正确的是?(选择所有符合条件的选项)
A. 封装(Encapsulation)使用package private实例变量。
B. 封装使用private实例变量。
C. 封装允许定义setter方法。
D. 不可变性(Immutability)使用package private实例变量。
E. 不可变性使用private实例变量。
F. 不可变性允许定义setter方法。
正确答案:B、C、E
疑问解答
1. package private实例变量的含义
Java的类成员(实例变量、方法、内部类等)共有4种访问控制级别,如果你没有给成员显式声明public/protected/private任意一个访问修饰符,默认的访问级别就是package private,也叫缺省访问级别、包级私有。
这个级别的成员仅允许同一个包下的其他类直接访问,不同包下的类哪怕是该类的子类,也不能直接访问。
题目中提到的package private实例变量,就是指没有加任何访问修饰符、默认属于包级私有访问权限的成员变量。
2. package本身不能应用访问修饰符的认知是否正确
这个认知完全正确。
Java的public/protected/private访问修饰符只能用来修饰类(顶级类仅支持public或者缺省访问级别,内部类支持全部4种访问级别)、类的成员(实例变量、静态变量、方法、构造器、内部类),包(package)本身没有访问修饰符的概念,也不允许给package声明添加任何访问修饰符。
内容的提问来源于stack exchange,提问作者Tomas
相关产品推荐
相关产品推荐

