有兩種等級的存取控制:
類別等級(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);
}
}
|
沒有留言:
張貼留言