类成员访问控制权限
在JAVA中有四种访问控制权限,分别为:private, default, protected, public
1、Private
如果一个成员方法或变量名前使用了private, 那么这个成员只能在类的内部使用。
2、Default
如果一个成员方法或变量名前没有使用任何访问控制符,就为default。默认的访问控制成员可以被这个包中的其它类访问(包括这个包中的子类内部以及这个包中所有类以对象.成员的方式访问)。如果这个子类不在这个包中,则子类也不能访问父类的默认访问控制成员
3、Protected
这个成员既可以被这个包中其它类访问,也可以被不同包中的子类内部访问
4、Public
可以被所有类访问,不管访问类与被访问类在不在同一个包中
总结
Private |
Default |
Protected |
public |
|
只用本类内部可访问 |
√ |
√ |
√ |
√ |
同一包中的类(包括子类,以及以对象.成员) |
|
√ |
√ |
√ |
其它包中的子类内部 |
|
|
√ |
√ |
其它包中的类(对象.成员, 不是子类) |
|
|
|
√ |
以下是示例代码:
1、包myjava.learn.package1:
Person.java
package myjava.learn.package1; public class Person { private int a_pri = 10; // private只能在本类被访问, 子类也不能访问 int a_defaut = 11; protected int a_prot = 12; public int a_pub = 13; }
PersonPackage1.java
package myjava.learn.package1; public class PersonPackage1 extends Person{ void fun(){ // 以下当然可以被访问,因为在同一个包中的类可以访问default, protected, public this.a_defaut = 12; this.a_prot = 13; this.a_pub = 14; System.out.println( this.a_defaut ); } }
Main.java
package myjava.learn.package1; public class Main { public static void main( String args [] ){ PersonPackage1 pp = new PersonPackage1(); pp.fun(); // 同一包中的类可以以[对象.成员]访问default, protected, public System.out.println( pp.a_defaut ); System.out.println( pp.a_prot ); System.out.println( pp.a_pub ); } }
2、包myjava.learn.package2:
Main.java
package myjava.learn.package2; import myjava.learn.package1.PersonPackage1; import myjava.learn.package1.Person; // 其它包中的子类 class PersonPackage2 extends Person{ void PrintAttr(){ // 不同包的子类只能访问父类的public, protected System.out.println(this.a_prot); System.out.println(this.a_pub ); } } public class Main { public static void main(String[] args) { // TODO Auto-generated method stub // 其它包中的类(对象.成员, 不是子类),只能访问public成员 PersonPackage1 pp = new PersonPackage1(); System.out.println(pp.a_pub); PersonPackage2 pp2 = new PersonPackage2(); pp2.PrintAttr(); } }