1. 程式人生 > >《Java編程思想》筆記 第六章 訪問權限控制

《Java編程思想》筆記 第六章 訪問權限控制

互訪問 無法 this port 3.2 access 不能 外部 包名

1.編譯單元

  • 一個 編譯單元即 .java 文件 內只能有一個 public 類 且該文件名必須與public 類名 完全一致。
  • 編譯單元內也可以沒有public類 文件名可隨意。

2. 包:庫單元

2.1 默認訪問權限即包訪問權限,同一包下可訪問(指同一目錄下各個.java文件中的包訪問權限類或者類成員可相互訪問)。

2.2 父,子目錄不屬於同一包(其實沒有什麽父子目錄,包名都是唯一的)。

2.3 包可以看成類的集合,裏面有public類 也有默認權限類,所以同一包下2個.java文件中不能有類同名。

2.4 要使用其他包中的類 需要導包 import

3.權限從大到小

  • public protected 包訪問權限 private

3.1 public 接口訪問權限

3.2 protected 繼承訪問權限和包訪問權限,無public權限。

3.3 private 無法訪問 只有該private成員所在的類能訪問。

3.4 把所有構造器設為private可以阻止類之外通過new創建對象。

4.類的權限

  • 類只有public和默認包權限,內部類可以有protected和private權限。

5.訪問權限控制也叫具體實現的隱藏

6.封裝

  • 把數據和方法包裝進類中,以及具體實現的隱藏。

7.類的訪問權限

  • 對於一個類來說其內部成員相互沒有什麽權限,並且調用方法不需要對象和this
class Test {
    
private void f() { }; void g() { f(); }; }

8.private構造器 外部不能產生該類對象

  • private構造器 外部不能產生Test對象 但可以通過其類內部的靜態方法返回該類對象,這樣外部就可以創建Test對象了
public class ClassRe {

    public static void main(String[] args) {
        Test p1 = Test.make(),
             p2 = Test.make();
        System.out.println(p1);
        System.out.println(p2);

    }

}

class Test { private Test() {}; static Test make() { return new Test(); } }

從輸出看創建了2個不同對象

lpkiebfe.Test@62efae3b
lpkiebfe.Test@6597d63b

9.單例

class Test {
    private Test() {};

    private static Test t1 = new Test(); //只創建一個對象
    
    public static Test access(){  //外部只能通過調用該方法創建Test對象
        return t1;
    }
}

.

《Java編程思想》筆記 第六章 訪問權限控制