Java实例变量可访问性

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

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

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


  • 公共:任何人都可以读/写
  • 保护:对于子类的实例和封装包内的读/写
  • private:对于类的任何实例以及内部或外部(封闭)实例的读/写
  • int c:package-private,对于同一个包内的所有类,读/写
  • 有关更多详细信息,请参阅JLS

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


    对不起,回复前一个答案的更正,但我没有足够的信誉直接修改...

  • 公开 - 读/写任何人
  • 保护 - 对实例子类和同一包内的所有类都可读/写
  • int c:package-private,对于同一个包内的所有类,读/写
  • 私人 - 读/写该类​​的任何成员本身和内部类(如果有的话)
  • 最好从最广泛的访问(公共)到最窄的(私人)访问修饰符,知道当从狭义变为宽泛时,您不会失去任何可能性。

    对于“受保护的”来说,这一点尤其重要,因为它经常被误解为同一包中的类也可以访问类的受保护成员(不仅是它的子类)。


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

    我喜欢保持课程独立。 如果另一个类需要访问我的类中的某些东西,它应该是公开的(并且它应该通过方法而不是属性)。 否则,我觉得你已经破坏了封装,正如在抽象VS信息隐藏VS封装中所解释的。

    链接地址: http://www.djcxy.com/p/24051.html

    上一篇: Java Instance Variable Accessibility

    下一篇: public javax.swing.Box.Filler from another package?