引言:通路權限(或隐藏具體實作)與“最初的實作并不恰當”有關。
先了解兩個概念:
封裝(encapsulation),即隐藏對象的屬性和實作細節,僅對外公開接口。
重構(refactoring),就是通過調整程式代碼改善軟體的品質、性能,使其程式的設計模式和架構更趨合理,提高軟體的擴充性和維護性。
程式員分為兩類,類庫的消費者和類庫的開發者,類庫的消費者希望類庫出現新版本的時候,他們并不需要改寫他們的代碼,而類庫的開發者則必須有權限對類庫進行修改和改進,而不影響用戶端程式員。
這就要求我們将“變動的事物”與“保持不變的事物”區分開來。
這正是通路權限的作用所在。
包提供了一個管理命名空間的機制。目的是将所有類成員的名稱彼此隔離。
包名的命名規範參見前面的文章http://blog.csdn.net/qq_18738333/article/details/49828349
編譯單元是一個帶字尾名.java的檔案,編譯單元内隻能有一個public類,且該類的名稱必須與檔案名相同。編譯一個.java檔案,其中的每個類都會生成一個字尾名為.class的檔案。
java可運作程式是一組可以打包并壓縮為一個java文檔檔案(jar,使用java的jar生成器)的.class檔案。java解釋器負責對這些檔案的尋找、裝載和解釋。
類庫是一組類檔案,每個檔案都有一個public類,以及任意數量的非public檔案,用關鍵字package組合到一起。
package語句必須作為檔案的第一個非注釋語句出現,表明該編譯單元是某個類庫的一部分,但使用一個類庫時,必須用import語句導入。
需要記住:package和import語句關鍵字允許你做的,是将單一的全局名字空間分割開,使得無論多少人在使用internet和java編寫類,都不會出現名稱沖突的問題。
1. 包通路權限
2. public:接口通路權限
3. protect:繼承通路權限
4. private:私有
獲得通路權限的方法有這些:
(1) 使成員成為“public”(公共的)。這樣所有人從任何地方都可以通路它。
(2) 舍棄所有通路訓示符,并将其類置于相同的包内。這樣一來,包内的其他類就可以通路成員。
(3) 繼承的類既可以通路一個protected成員,也可以通路一個public成員(但不可通路private成員)。
(4) 提供“通路器(accessor)/變異器(mutator)”方法(亦稱為“擷取(get)/設定(set)”方法),以便讀取和修改值。這是oop環境中最優雅的一種方法。
不多累贅,隻記錄需要注意的用法:
1. 預設包為包内的檔案提供了包通路權限
2. 類的通路權限隻有包通路權限和public兩種選擇。
3. 如果想控制如何建立對象,并阻止别人通路某個特定的構造器(或者全部構造器),可以使用private修飾構造器,用一個static方法控制建立對象。這就是單例模式(singleton)。這是很常見的設計模式,比如遊戲引擎中的導演類。
看下面這段代碼