public,private,protected /java

private,public,protected,默認不寫(firendly)

1、Class類的訪問權限: 
public:可以供所有的類訪問。 
默認:默認可以稱爲friendly但是,java語言中是沒有friendly這個修飾符的,這樣稱呼應該是來源於c++。默認的訪問權限是包級訪問權限。 
      即如果寫了一個類沒有寫訪問權限修飾符,那麼就是默認的訪問權限,同一個包下的類都可以訪問到,即使可以實例化該類 
      (當然如果這個類不具有實例化的能力除外,比如該類沒有提供public的構造函數)。 

說明: 
    1、每個編譯單元(類文件)都僅能有一個public class 
    2、public class的名稱(包含大小寫)必須和其類文件同名。 
    3、一個類文件(*.java)中可以不存在public class。 
     這種形式的存在的場景:如果我們在某個包內撰寫一個class,僅僅是爲了配合同包內的其他類工作,而且 
    我們不想再爲了撰寫說明文檔給客戶(不一定是現實意義的客戶,可能是調用這個類的類)看而傷腦筋,而且有可能過一段時間之後 
    有可能會徹底改變原有的做法,並完全捨棄舊版本,以全新的版本代替。 
    4、class不可以是private和protected。 
    5、如果不希望那個任何產生某個class的對象,可以將該類得所有構造函數設置成private。但是即使這樣也可以生成該類的對象,就是class的static的成員(屬性和方法)可以辦到。 

2、類成員變量的訪問權限: 
public:緊接public的屬性任何類都可以訪問到。可以直接使用ClassName.propertyName。但是從類的封裝性上來考慮將一個類的屬性定義成public一般很少使用, 
     在定義靜態常量的時候通暢會這樣定義。如:public static final int PAGE_SIZE=10; 
private:只有類本身內部的方法可以訪問類的private屬性,當然內部類也可以訪問其外部類的private成員的。(屬性和方法) 
默認(friendly):包級可見,同一個包內的類可以訪問到這個屬性,可以直接使用className.propertyName來訪問,但是從類的封裝性特性來說很少這樣使用類的屬性的。 
protected:關鍵字所處理的是所謂“繼承”的觀念。對於同一包的其他類,protected=默認,對於不同包的類,如果存在繼承關係,而baseClass存在protected屬性,則可以被其自繼承,而不同包的其他類 
      則不能訪問類的protected屬性。 
    
3、類的成員方法的訪問權限: 
其從語法角度來講,這些訪問權限控制符作用於類的方法和作用於類的屬性上的效果是一樣的。 
public:所有類可見。 
pirvate:只有同一類內部的方法可見,在有就是內部類也可以訪問到。 
默認(friendly):包內可見。 
protected:繼承可見。 

4、訪問權限存在的理由 
1、“讓使用者無法碰觸到他們不該碰觸的東西。”這些東西僅供類的內部機制使用。將某些成員聲明成private,對於使用者來說可以說是一種服務, 
因爲這樣使用者可以知道哪些是他關注的哪些是不重要的,不需要關注,如此歷來對於使用來說降低了對使用對象認識的難度。 
2、(最終要的理由)讓程序設計者可以更動class內部運作方式,而無須擔心波及到客戶端程序。 

5、java的“訪問權限修飾符”賦予classes開發者極具有價值的控制能力。身爲classes開發者,如果你的任何改變可以完全不干擾你的使用者, 
你便可以安心改變你的底層實現,因爲客戶端程序員無法訪問class的這一部分。 

通過今天學習訪問權限的問題瞭解到,接口或者抽象等等策略所謂的“實現隱藏”其根本原因並不是說爲了隱藏實現的代碼和思路,而是降低使用者的使用難度,以及從維護角度來說可見範圍的控制給程序維護帶來了極大的安全性。 





1. 爲什麼每個編譯文件只能有一個public類?

java程序是從一個public類的main函數開始執行的,(其實是main線程),就像C程序是從main()函數開始執行一樣。     只能有一個public類是爲了給類裝載器提供方便。     一個public   類只能定義在以它的類名爲文件名的文件中。 

每個編譯單元(文件)都只有一個public   類。因爲每個編譯單元都只能有一個公共接口,用public類來表現。該接口可以按照要求包含衆多的支持包訪問權限的類。如果有一個以上的public   類,編譯器就會報錯。  並且public類的名稱必須與文件名相同(嚴格區分大小寫)。  當然一個編譯單元內也可以沒有public類。 

在一個源文件.JAVA文件中可以有很多類,只有一個PUBLIC類其他的都不能是.   
在PUBLIC類中找程序的入口   main函數  你想想如果很多PUBLIC   類,那程序從何運行呢?

2.內部類,外部類

內部類和外部類聯繫:內部類可以訪問外部類所有的方法和屬性,如果內部類和外部類有相同的成員方法和成員屬性,內部類的成員方法調用要優先於外部類即內部類的優先級比較高(只限於類內部,在主方法內,內部類對象不能訪問外部類的成員方法和成員屬性),外部類只能訪問內部類的靜態常量或者通過創建內部類來訪問內部類的成員屬性和方法

內部類定義的靜態常量可以全局訪問


創建內部類

第一種方式

假設A是外部類,B是內部類

A a=new A();

A.B b=a.new B();


或者用A類的匿名對象來訪問


A.B b=new A().new B();


發佈了2 篇原創文章 · 獲贊 0 · 訪問量 7939
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章