thinkinjava--6 訪問許可權控制
訪問許可權修飾詞主要為:default,public,private,proteced,
1.包訪問許可權(即不提供任何訪問修飾符)
類控制著自己成員的訪問許可權,包訪問許可權,指一個包裡面的類可以互相訪問。如果其他包的類要訪問該包的成員,可以通過以下方法:
a.改變該成員的訪問許可權為public
b.將類和需要訪問的類放到同一個包裡面,這樣就可以獲取成員的程式碼
c.提供訪問器和變異器(即生成getter 和setter ),這是最優雅的方式,也是javaBean的基本原理
d.繼承,對於protected訪問修飾符
2.public:介面訪問許可權
3.private:你無法訪問
除了該類的成員可以訪問,其他類都不可以訪問
4.protected:繼承訪問許可權
當兩個類在不同的package時,除了public其他修飾符都不能訪問;如果提供protected修飾符,並繼承實現繼承關係,給成員加上protected修飾符,此時可以訪問。
下面舉例說明不同包下default和prctected的作用
建立一個基類和一個繼承,位於不同的包中
//: access/dessert/Cookie.java package access.dessert; public class Cookie { public Cookie() { System.out.println("Cookie constructor"); } void bite() { System.out.println("bite"); } }
子類
package access; import access.dessert.*; public class ChocolateChip extends Cookie { public ChocolateChip() { System.out.println("ChocolateChip constructor"); } public void chomp() { //! bite(); // 這裡會出現編譯時錯誤 } public static void main(String[] args) { ChocolateChip x = new ChocolateChip(); // x.chomp(); } } /*輸出: Cookie constructor ChocolateChip constructor *///:~ 結論:基類的成員bite()為預設的訪問許可權,不能提供跨包的訪問
基類:給bite()成員加上protected修飾
package access.cookie2;
public class Cookie {
public Cookie() {
System.out.println("Cookie constructor");
}
protected void bite() {
System.out.println("bite");
}
}
子類
package access;
import access.cookie2.*;
public class ChocolateChip2 extends Cookie {
public ChocolateChip2() {
System.out.println("ChocolateChip2 constructor");
}
public void chomp() { bite(); } // Protected method
public static void main(String[] args) {
ChocolateChip2 x = new ChocolateChip2();
x.chomp();
}
}
//輸出:
Cookie constructor
ChocolateChip2 constructor
bite
實驗證明:protected修飾符在繼承中能提供跨包訪問。(有關繼承的知識後面再學)
總結:
包內 子類 包外
public √ √ √
protected √ √ x
defalult √ x x
private x x x