搜尋此網誌

2009年12月2日 星期三

Java存取修飾子


有兩種等級的存取控制:


類別等級(class level)包含了:public, or default (no modifier).


成員等級(member level)包含了:public, private, protected, or default (no modifier).


以下table展示了每一個修飾子可以存取的成員:


















































修飾子

Package內,類別本身

Package內,不同類別之間

不同Package內的子類別

所有類別




public


Y

Y

Y

Y




protected


Y

Y

Y

N



no modifier

Y

Y

N

N




private


Y

N

N

N












第一欄可解讀為:

Package內,類別本身可存取(可以看到)的成員為private,protected,default,public





package One;
public class SuperClassA {
public int a=1;
protected int b=2;
int c=3;
private int d=4;
public static void main(String[]args){
System.out.println(new SuperClassA().a);
System.out.println(new SuperClassA().b);
System.out.println(new SuperClassA().c);
System.out.println(new SuperClassA().d);

}
}




第二欄可解讀為:

Package內,不同類別之間可存取(可以看到)的成員為protected,default,public





package One;

public class SuperClassA {

public int a=1;
protected int b=2;
int c=3;
private int d=4;
public static void main(String[]args){

System.out.println(new B().a);
System.out.println(new B().b);
System.out.println(new B().c);
//compile-error:System.out.println(new B().d);

}
}
class B{


public int a=1;
protected int b=2;
int c=3;
private int d=4;


}


第三欄可解讀為:

不同Package內的子類別,可存取(可以看到)的成員為protected,public兩者





package Two;
import One.SuperClassA;

class SubOfA extends SuperClassA {

public SubOfA(){
System.out.println(super.a);
System.out.println(super.b);
//compile Error--->System.out.println(super.c);
//compile Error--->System.out.println(super.d);
}

}



第四欄可解讀為:

所有類別皆可存取(可以看到)的成員只有public





package Two;
import One.SuperClassA;

public class OtherClass {
public static void main(String[]args){
System.out.println(new SuperClassA().a);
//compile error--->System.out.println(new Alpha().b);
//compile error--->System.out.println(new Alpha().c);
//compile error--->System.out.println(new Alpha().d);

}

}



沒有留言:

張貼留言