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