編程思想--第6章--訪問權(quán)限控制

訪問權(quán)限控制

訪問控制(或隱藏具體實(shí)現(xiàn))與“最初的實(shí)現(xiàn)并不恰當(dāng)”有關(guān)。

重構(gòu)即重寫代碼,以使得它更可讀,更易理解,并因此而更具可維護(hù)性。

訪問權(quán)限控制的等級(jí),從大到小是:public,protected,包訪問權(quán)限(沒有關(guān)鍵詞)和private。

java用關(guān)鍵字package將構(gòu)建捆綁到一個(gè)內(nèi)聚的類庫單元中。

一、包:庫單元

包內(nèi)包含一組類,他們在單一的名字空間下被組織在一起。

import java.util.* 導(dǎo)入類使用的 “*”,就是提供一個(gè)管理名字空間的機(jī)制,所有類成員的名稱都是彼此隔離的。

由于名字之間的潛在沖突,在java中對名稱空間進(jìn)行完全控制并為每個(gè)類創(chuàng)建唯一的標(biāo)識(shí)符組合就成為了非常重要的事情。

未命名的包,被稱為默認(rèn)包,java包命名的規(guī)則是全部使用小寫字母。java源代碼文件通常被稱為編譯單元,每個(gè)編譯單元都必須有一個(gè)后綴名 .java 該java文件中的每個(gè)類都會(huì)有一個(gè)輸出文件,該輸出文件名稱與 .java文件中每個(gè)類的名稱相同,只是多了一個(gè)后綴名 .class。

java可運(yùn)行程序是一組可以打包并壓縮為一個(gè)java文檔文件(JAR,使用java的jar文檔生成器)的.class文件。java解釋器負(fù)責(zé)這些文件的查找,裝載和解釋。

package關(guān)鍵字歸納屬于同一個(gè)群組的 java文件,它必須在java文件中除注釋外的第一句程序代碼。

package名稱的第一部分是類的創(chuàng)建者的反順序的Internet域名,域名是獨(dú)一無二的,因此你的包名也是獨(dú)一無二的。

java運(yùn)行解釋器運(yùn)行過程如下:首先,找出環(huán)境變量CLASSPATH,CLASSPATH包含一個(gè)或多個(gè)目錄,用作查找.class文件的根目錄。從根目錄開始,解釋器獲取包的名稱并將每個(gè)句點(diǎn)替換成反斜杠,以從CLASSPATH根中產(chǎn)生一個(gè)路徑名稱(package foo.bar.baz變成foo\bar\baz或者foo/bar/baz),得到的路徑會(huì)與CLASSPATH中的各個(gè)不同的項(xiàng)相連接,解釋器就在這些目錄中查找與你所要?jiǎng)?chuàng)建的類名稱相關(guān)的.class文件。

二、java訪問權(quán)限修飾詞

public,protected,包訪問權(quán)限(沒有關(guān)鍵詞)和private。每個(gè)訪問權(quán)限修飾詞筋控制它所修飾的特定定義的訪問權(quán)

1,包訪問權(quán)限

默認(rèn)訪問權(quán)限沒有任何關(guān)鍵字,但通常是指包訪問權(quán)限(有時(shí)也表示成為friendly)。這意味著當(dāng)前的包中的所有其他類對那個(gè)成員都有訪問權(quán)限,但對于這個(gè)包之外的所有類,這個(gè)成員是private。由于一個(gè)編譯單元(即一個(gè)文件),只能錄屬于一個(gè)包,所以經(jīng)由包訪問權(quán)限,處于同一個(gè)編譯單元中的所有類彼此之間都是自動(dòng)可訪問的。

2,pubilc:接口訪問權(quán)限

使用關(guān)鍵字public,就意味著public之后緊跟著的成員生命自己對每個(gè)人都是可用的,尤其是使用類庫的客戶程序員更是如此。

3,private:你無法訪問

關(guān)鍵字private意思是除了包含該成員的類之外,其他任何類都無法訪問這個(gè)成員。

4,protected繼承訪問權(quán)限

關(guān)鍵字protected處理的是繼承的概念,通過繼承可以利用一個(gè)現(xiàn)有類-我們稱其為基類,然后將新成員添加到該現(xiàn)有類中而不必碰該現(xiàn)有類。還可以改變該類的現(xiàn)有成員行為。

三、接口和實(shí)現(xiàn)

訪問權(quán)限的控制常被稱為是具體實(shí)現(xiàn)的隱藏,把數(shù)據(jù)和方法包裝進(jìn)類中,以及具體實(shí)現(xiàn)的隱藏,常共同被稱為是封裝。其結(jié)果是一個(gè)同時(shí)帶有特征和行為的數(shù)據(jù)類型。

出于兩個(gè)很重要的原因,訪問權(quán)限控制將權(quán)限的邊界劃在了數(shù)據(jù)類型的內(nèi)部。1,要設(shè)定客戶端程序員可以使用和不可以使用的界限。2,將接口和具體實(shí)現(xiàn)進(jìn)行分離。

四、類的訪問權(quán)限

在java中,訪問權(quán)限修飾詞也可以用于確定庫中哪些類對于該庫的使用者是可用的。

每個(gè)編譯單元都只能有一個(gè)public類。public類的名稱必須完全與含有該編程單元的文件名相匹配,包括大小寫。編譯單元內(nèi)完全不帶public類也是可能的。

注意:類既不可以是private的也不可以說protected。所以對于類的訪問權(quán)限,僅有兩個(gè)選擇:包訪問權(quán)限或public。

五、總結(jié)

無論是在什么樣的關(guān)系中,設(shè)立一些為各成員所遵守的界限始終是很重要的。

本章討論了類是如何被構(gòu)建成類庫的:首先,介紹了一組類是如何被打包到一個(gè)類庫中的,其次,類是如何控制對其成員的訪問的。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 6.1 包:庫單元 控制對成員的訪問權(quán)限有兩個(gè)原因: 第一,為了使用戶不要碰觸那些他們不該碰觸的部分,這些部分對于...
    jchenluo閱讀 434評論 0 0
  • 一年又一年,字節(jié)跳動(dòng) Lark(飛書) 研發(fā)團(tuán)隊(duì)又雙叒叕開始招新生啦!【內(nèi)推碼】:GTPUVBA【內(nèi)推鏈接】:ht...
    盧卡斯嗶嗶嗶閱讀 119評論 0 1
  • 訪問控制(或隱藏具體實(shí)現(xiàn))與 “最初的實(shí)現(xiàn)并不恰當(dāng)” 有關(guān) 如何理解: 1.不可能一次性編寫出完美的代碼 需要反復(fù)...
    WandaGao閱讀 407評論 0 0
  • 進(jìn)行面向?qū)ο蟮脑O(shè)計(jì)時(shí),一項(xiàng)基本的考慮是:如何將發(fā)生變化的東西與保持不變的東西分隔開。 這一點(diǎn)對于庫來說是特別重要的...
    王偵閱讀 1,069評論 0 0
  • 訪問控制(或隱藏具體實(shí)現(xiàn))與“最初的實(shí)現(xiàn)并不恰當(dāng)”有關(guān)。 所有優(yōu)秀的作者,又是哪些編寫軟件的程序猿,都清楚其著作的...
    JoneSnow閱讀 995評論 0 0

友情鏈接更多精彩內(nèi)容