Java中以下变量的可访问性有何不同?
public class Joe {
public int a;
protected int b;
private int b;
int c;
}
我最感兴趣的是最后一个人在做什么。
答案 0 :(得分:9)
有关详细信息,请参阅JLS
编辑:添加了对受保护的评论说明从同一个包中授予了访问权限,你们是完全正确的。还添加了私人评论。我现在记得......; - )
答案 1 :(得分:2)
很抱歉回答了之前一个答案的更正,但我没有足够的声誉可以直接修改...
最好以这种方式订购访问修饰符,从最广泛的访问(公共)到最窄的(私有),知道当从窄到宽时,你不会失去任何可能性。
这对于“受保护”尤其重要,因为它经常被误解为同一个包中的类也可以访问类的受保护成员(不仅仅是其子类)。
答案 2 :(得分:1)
我尝试完全避免包级别访问(您提到的最后一次访问)。
我喜欢让课程自成一体。如果另一个类需要访问我的类中的某些东西,它应该是公共的(它应该是一个方法,而不是一个属性)。否则我觉得你已经崩溃encapsulation,如Abstraction VS Information Hiding VS Encapsulation中所述。
答案 3 :(得分:0)
所有这些都是编译时保护,它们可以在运行时通过反射轻松覆盖。