Java Instance Variable Accessibility
本问题已经有最佳答案,请猛点这里访问。
Java中以下变量的可访问性有什么不同?
1 2 3 4 5 6 | public class Joe { public int a; protected int b; private int b; int c; } |
我对最后一件事最感兴趣。
- 公共:任何人都可以读/写
- 保护:读/写子类实例和封闭包内的实例
- private:类的任何实例的读/写以及内部或外部(封闭)实例
- 国际会计准则:包私有,读/写同一包中的所有类
有关更多详细信息,请参见JLS。
编辑:为protected添加了评论,声明从同一个包中授予访问权限,你们完全正确。还为private添加了注释。我现在想起来了…;-)
很抱歉回答了之前一个答案的更正,但我没有足够的声誉直接修改…
- 公共-任何人都可以读/写
- 受保护-读/写实例子类和所有类同一包装内
- int c:包私有,内部所有类的读/写同一包装
- private-对该类本身的任何成员和内部类(如果有)进行读/写
最好以这种方式订购访问修饰符,从最宽的访问(公共)到最窄的(私有),知道从窄到宽的过程中不会失去任何可能性。
这对于"受保护"尤为重要,因为人们常常误解同一包中的类也可以访问某个类的受保护成员(不仅仅是其子类)。
我试图完全避免包级访问(您提到的最后一次访问)。
我喜欢保持班级独立。如果另一个类需要访问我的类中的某个对象,则它应该是公共的(并且它应该通过一个方法,而不是属性)。否则,我觉得您已经破坏了封装,如抽象、信息隐藏和封装中所述。
所有这些都是编译时保护,可以在运行时通过反射轻易地覆盖它们。