4

Java中以下变量的可访问性有什么区别?

public class Joe {
    public int a;
    protected int b;
    private int b;
    int c;
}

我最感兴趣的是最后一个在做什么。

4

4 回答 4

9
  • public: 任何人都可以读/写
  • protected:对子类的实例和封闭包内的实例可读/写
  • private:对于类的任何实例和内部或外部(封闭)实例都是可读/写的
  • int c:包私有,对同一包内的所有类都可读/写

有关详细信息,请参阅JLS

编辑:添加了受保护的注释,说明从同一个包内授予访问权限,你们是完全正确的。还添加了评论private。我想起来了... ;-)

于 2008-11-06T06:06:54.443 回答
2

很抱歉回答对以前一个答案的更正,但我没有足够的声誉来直接修改......

  • public- 任何人都可以读/写
  • protected- 可读取/写入实例子类和同一包内的所有类
  • int c:包私有,对同一包内的所有类都可读/写
  • private- 对该类本身和内部类的任何成员(如果有)可读/写

最好以这种方式对访问修饰符进行排序,从最广泛的访问 ( public) 到最窄的 ( private),知道从窄到宽时,您不会失去任何可能性。

这对于“受保护”尤其重要,因为在这种情况下,通常会误解同一个包中的类也可以访问一个类的受保护成员(不仅仅是它的子类)。

于 2008-11-06T07:44:02.533 回答
1

我尝试完全避免包级访问(您提到的最后一次访问)。

我喜欢让课程自成一体。如果另一个类需要访问我的类中的某些东西,它应该是public(并且它应该通过方法,而不是属性)。否则我觉得你已经破坏了封装,正如Abstraction VS Information Hiding VS Encapsulation中所解释的那样。

于 2008-11-06T06:23:34.317 回答
0

所有这些都是编译时保护,它们可以在运行时通过反射轻松覆盖。

于 2008-11-06T06:22:59.950 回答