類成員訪問控制權限
在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(); } }