1. 程式人生 > >thinkinjava--6 訪問許可權控制

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