Java類的訪問權限詳解

Java中總共有四類訪問權限修飾符(加上默認的)
private,public,protected,默認不寫(firendly)

下面就講解不同層次的訪問權限作用:Java的類有2種訪問權限,public、默認;而方法和變量有4種:public、默認、protected、private。

一、Class類的訪問權限:

1.public:可以供所有的類訪問。
 
2.默認:默認可以稱爲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的成員(屬性和方法)可以辦到。

二、類成員變量的訪問權限:

1.public:緊接public的屬性任何類都可以訪問到。可以直接使用ClassName.propertyName。但是從類的封裝性上來考慮將一個類的屬性定義成public一般很少使用,在定義靜態常量的時候通暢會這樣定義。如:public static final int PAGE_SIZE=10;

2.private:只有類本身內部的方法可以訪問類的private屬性,當然內部類也可以訪問其外部類的private成員的。(屬性和方法)

3.默認(friendly):包級可見,同一個包內的類可以訪問到這個屬性,可以直接使用className.propertyName來訪問,但是從類的封裝性特性來說很少這樣使用類的屬性的。

4.protected:關鍵字所處理的是所謂“繼承”的觀念。對於同一包的其他類,protected=默認,對於不同包的類,如果存在繼承關係,而baseClass存在protected屬性,則可以被其自繼承,而不同包的其他類則不能訪問類protected屬性。

三、類的成員方法的訪問權限:

其從語法角度來講,這些訪問權限控制符作用於類的方法和作用於類的屬性上的效果是一樣的。
1.public:所有類可見。

2.pirvate:只有同一類內部的方法可見,在有就是內部類也可以訪問到。

3.默認(friendly):包內可見。

4.protected:繼承可見。

其中默認訪問權限和protected很相似,有着細微的差別。

下面放一張圖更爲直觀的看到這四類的相同和區別之處
在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章