|
1、Class類的訪問權(quán)限: public:可以供所有的類訪問。 默認(rèn):默認(rèn)可以稱為friendly但是,java語言中是沒有friendly這個修飾符的,這樣稱呼應(yīng)該是來源于c++。默認(rèn)的訪問權(quán)限是包級訪問權(quán)限。 即如果寫了一個類沒有寫訪問權(quán)限修飾符,那么就是默認(rèn)的訪問權(quán)限,同一個包下的類都可以訪問到,即使可以實例化該類 (當(dāng)然如果這個類不具有實例化的能力除外,比如該類沒有提供public的構(gòu)造函數(shù))。 說明: 1、每個編譯單元(類文件)都僅能有一個public class 2、public class的名稱(包含大小寫)必須和其類文件同名。 3、一個類文件(*.java)中可以不存在public class。 這種形式的存在的場景:如果我們在某個包內(nèi)撰寫一個class,僅僅是為了配合同包內(nèi)的其他類工作,而且 我們不想再為了撰寫說明文檔給客戶(不一定是現(xiàn)實意義的客戶,可能是調(diào)用這個類的類)看而傷腦筋,而且有可能過一段時間之后 有可能會徹底改變原有的做法,并完全舍棄舊版本,以全新的版本代替。 4、class不可以是private和protected。 5、如果不希望那個任何產(chǎn)生某個class的對象,可以將該類得所有構(gòu)造函數(shù)設(shè)置成private。但是即使這樣也可以生成該類的對象,就是class的static的成員(屬性和方法)可以辦到。 2、類成員變量的訪問權(quán)限: public:緊接public的屬性任何類都可以訪問到??梢灾苯邮褂肅lassName.propertyName。但是從類的封裝性上來考慮將一個類的屬性定義成public一般很少使用, 在定義靜態(tài)常量的時候通暢會這樣定義。如:public static final int PAGE_SIZE=10; private:只有類本身內(nèi)部的方法可以訪問類的private屬性,當(dāng)然內(nèi)部類也可以訪問其外部類的private成員的。(屬性和方法) 默認(rèn)(friendly):包級可見,同一個包內(nèi)的類可以訪問到這個屬性,可以直接使用className.propertyName來訪問,但是從類的封裝性特性來說很少這樣使用類的屬性的。 protected:關(guān)鍵字所處理的是所謂“繼承”的觀念。對于同一包的其他類,protected=默認(rèn),對于不同包的類,如果存在繼承關(guān)系,而baseClass存在protected屬性,則可以被其自繼承,而不同包的其他類 則不能訪問類的protected屬性。 3、類的成員方法的訪問權(quán)限: 其從語法角度來講,這些訪問權(quán)限控制符作用于類的方法和作用于類的屬性上的效果是一樣的。 public:所有類可見。 pirvate:只有同一類內(nèi)部的方法可見,在有就是內(nèi)部類也可以訪問到。 默認(rèn)(friendly):包內(nèi)可見。 protected:繼承可見。 4、訪問權(quán)限存在的理由 1、“讓使用者無法碰觸到他們不該碰觸的東西?!边@些東西僅供類的內(nèi)部機(jī)制使用。將某些成員聲明成private,對于使用者來說可以說是一種服務(wù), 因為這樣使用者可以知道哪些是他關(guān)注的哪些是不重要的,不需要關(guān)注,如此歷來對于使用來說降低了對使用對象認(rèn)識的難度。 2、(最終要的理由)讓程序設(shè)計者可以更動class內(nèi)部運作方式,而無須擔(dān)心波及到客戶端程序。 5、java的“訪問權(quán)限修飾符”賦予classes開發(fā)者極具有價值的控制能力。身為classes開發(fā)者,如果你的任何改變可以完全不干擾你的使用者, 你便可以安心改變你的底層實現(xiàn),因為客戶端程序員無法訪問class的這一部分。 通過今天學(xué)習(xí)訪問權(quán)限的問題了解到,接口或者抽象等等策略所謂的“實現(xiàn)隱藏”其根本原因并不是說為了隱藏實現(xiàn)的代碼和思路,而是降低使用者的使用難度,以及從維護(hù)角度來說可見范圍的控制給程序維護(hù)帶來了極大的安全性。 |
|
|
來自: 李副營長 > 《訪問權(quán)限》