1. 程式人生 > >Java訪問許可權修飾符詳解

Java訪問許可權修飾符詳解

Java中的訪問許可權修飾符(Java關鍵字)

今天很皮的發現,自己現在竟然不會玩兒Java基礎了,就翻看了一下自己的筆記,寫一篇文章複習一下!

測試環境:Java執行環境,myEclipse。

測試前準備:實體類包(Student類,Teacher類),測試類包(TestPublic類,TestProtected類,TestPrivate類)。

    首先讓我們想想這四種修飾符:public,protected,default(也有叫frendly的,不過兩個都通不過編譯,不寫就是這個修飾符了),private。

測試開始

    修飾類時:當訪問許可權修飾符修飾類的時候,只能使用預設的修飾符和public修飾符,在不適用public的時候在不同的包中不可以訪問到這個類,在Java這種面向物件程式設計的語言來說,應該將類設定成public的類,使用了public修飾的類可以匯入到任何的類中,而不修飾的類只能在本包中使用。
       沒有修飾的類Teacher類:    相同的包下,可以任意使用:

    不同的包,訪問不到:

    修飾其它時:當訪問許可權修飾符修飾成員方法和成員變數的時候,這四種修飾符代表了四種訪問許可權,我們可以開始測試。
    1:首先建立實體包和一個測試包,我們在這個entity包中寫一個Student類,其中寫入八個元素,為了測試的方便,我們可以都將其用static進行修飾,四個變數和四個方法分別用不同的修飾符修飾。
    
    2:在測試包中寫TestPublic測試類,可以看到通過類名呼叫的成員變數和成員方法只有public修飾符修飾的通過了編譯。

    3:在測試包中寫TestProtected測試類並繼承自Student類,可以看到通過類名呼叫的成員變數和成員方法使用public和protected修飾符修飾的通過了編譯。


    4:在實體包中寫TestDefault測試類並繼承自Student類,可以看到通過類名呼叫的成員變數和成員方法只有private修飾符修飾的沒有通過編譯。    5:回到Student實體類中,會發現使用private修飾的成員方法和成員變數被黃線擡起來了,滑鼠懸浮上去,成員變數提示要麼刪除這個變數,要麼提供getter和setter方法,要麼加上註解表示這個成員變數不使用。而成員方法是不可能有getter和setter方法的,這些說明了什麼,說明了private的訪問範圍。
    總結如下:    1:public修飾的變數或者方法在不同包中,相同包中,子類中,當前類中都是可以直接訪問的。

    2:protected修飾的變數或者方法在相同包中,子類中當前類中都是可以直接訪問的,在不同包中的類則不能訪問。
3:default(也就是預設的)的變數或者方法在相同包中當前類中都是可以直接訪問的,在不同包中,即便是子類中也不能訪問。4:private修飾的變數或者方法只能在當前類中都是直接訪問,在不同類中就不能訪問,只能提供向外的公開的方法去呼叫,也就是面向物件的封裝(這裡暫時不提面向物件)。    關係圖如下:
作用域當前類同一包子孫類其它包
public
protected
default(friendly)
private