《Java編程思想》筆記 第六章 訪問權限控制
阿新 • • 發佈:2018-05-15
互訪問 無法 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編程思想》筆記 第六章 訪問權限控制