JAVA学习脚印8: 类及其成员的访问权限
本节介绍java语言的访问权限问题。
1. java中的访问控制
最高级别:对于类,外部类只可以使用public,pakage-private(即不带任何修饰符的情况)修饰;嵌套类(nested class) 可以使用private, public, protected,package-private 。
成员级别: 对于成员,可以使用 private, public, protected,package-private 。
四种修饰符对应的访问权限为:
- private 仅对本类可见。
- public 对所有的类可见
- protected 对本包及所有子类可见
- package-private 即不带任何修饰符时的默认权限,仅对包可见。
private是最严格限制的访问修饰符,它给对象提供了很好的封装性,对外界隐藏了对象的数据。
Public 是最宽松的访问限制,使用它修饰的类及成员对外界都可见。
protected访问权限可以用于解决,父类只想让子类继承其成员而不对其他类可见的情形。
下面是来自:http://docs.oracle.com/javase/tutorial/java/javaOO/accesscontrol.html,关于访问权限的总结表:
从上表来看,第二列表明一个类总是可以访问自己的成员;第三列表明除了private修饰以外,其余的都对本包中的类可见;第四列表明,包外的子类的访问权限;第五列表明是否对所有的类都可见。
2. 子类从父类继承成员的访问权限
子类继承父类的成员后,不可以降低父类的访问权限。例如如下代码:
public class SuperClass {
protected void testMethod() {}
}
class SubClass extends SuperClass {
private void testMethod() {}
}
将产生如下错误提示:
SuperClass.java:8: error: testMethod() in SubClass cannot override testMethod() in SuperClass private void testMethod() {} attempting to assign weaker access privileges;
同时开发环境提示错误信息:
Cannot reduce the visibility of the inherited method from SuperClass 。
为此有如下有求:
父类中的public方法,在子类中只能是public;
父类中的protected方法在子类中只能是protected或者public。
也可以参考: http://www.tutorialspoint.com/java/java_access_modifiers.htm