【发布时间】:2023-03-17 22:52:01
【问题描述】:
Java中以下变量的可访问性有什么区别?
public class Joe {
public int a;
protected int b;
private int b;
int c;
}
我最感兴趣的是最后一个在做什么。
【问题讨论】:
标签: java inheritance variables accessibility
Java中以下变量的可访问性有什么区别?
public class Joe {
public int a;
protected int b;
private int b;
int c;
}
我最感兴趣的是最后一个在做什么。
【问题讨论】:
标签: java inheritance variables accessibility
public:任何人都可以读/写protected: 可读写
子类的实例和来自封闭包内
private: 类的any实例可读/写
和内部或外部(封闭)实例int c:
包私有,读/写
同一个包内的所有类查看JLS了解更多详情
编辑:添加了受保护的注释,说明从同一个包内授予访问权限,你们是完全正确的。还为private 添加了评论。我现在想起来了... ;-)
【讨论】:
很抱歉对上一个答案进行更正,但我没有足够的声誉直接修改...
public - 任何人都可以读/写protected - 读/写
实例子类和所有类
在同一个包裹内int c:包私有,
内部所有类的读/写
同一个包private - 该类本身和内部类(如果有)的任何成员均可读/写最好以这种方式对访问修饰符进行排序,从最广泛的访问权限 (public) 到最窄的访问权限 (private),知道从窄到宽时,您不会失去任何可能性。
这对于“受保护”尤其重要,在这种情况下,经常被误解为同一个包中的类也可以访问一个类的受保护成员(不仅仅是它的子类)。
【讨论】:
我尝试完全避免包级访问(您提到的最后一次访问)。
我喜欢让课程自成一体。如果另一个类需要访问我的类中的某些东西,它应该是public(它应该是一个方法,而不是一个属性)。否则我觉得你已经破坏了encapsulation,正如Abstraction VS Information Hiding VS Encapsulation 中所解释的那样。
【讨论】:
所有这些都是编译时保护,它们可以在运行时通过反射轻松覆盖。
【讨论】: