探究Java中的4種訪問許可權--------Java的系列學習之路(14)
前言——
今天軍訓的第四天,早上下了小雨,摸魚了一上午,下午練軍體拳。想寫的內容很多,突然不知道今晚總結什麼,最終決定寫個基本但是非常重要的部分。 歡迎轉載,轉載請註明來處。
在Java中有4種訪問許可權關鍵字,分別是public,private,protected, 預設訪問許可權(包訪問許可權)。這4個許可權關鍵字要麼修飾類,要麼修飾變數和方法,而且會有一點點小差異,所以我就針對修飾類和方法的不同來展開:
目錄
一.修飾類
類只能被public, 包訪問許可權這兩種修飾。
a.public類
表示這個類在任何地方都可見,就算在不同的Package中也是完全可以的。
如上,Pet類在Code_180這個包當中,而且是個public類。呼叫Pet類的Limit_Visible是在JavaObject這個包當中。這說明了public類對其他類都可見,無論是在同一個包還是在不同一個包中。
b.預設訪問許可權(包訪問許可權)修飾的類
包訪問許可權的類,顧名思義,只能對同一個包下的類可見,對不同一個包下的類是不可見的。
在這邊可以看到,Dog類位於code_180這個包中,而且是預設訪問許可權。JavaObject包中的Limit_Visible去呼叫Dog類時就會出錯。只要在Code_180這個包中新建一個類檔案,然後把Dog類申明為public類就可以了。
二.修飾變數和方法。
前提:這邊可呼叫,包含兩種:1種是沒有繼承關係時在main函式裡面的呼叫;另一種是有繼承關係時在子類內部顯示地呼叫。如果不可呼叫,表示兩種情況都不可以。
a.包訪問許可權(預設訪問許可權)。
此時被修飾的方法和變數只能在同一個包中被顯示地呼叫,其他包不能呼叫。
在這邊,Pet類雖然是Public類,但是其getType()方法是預設訪問許可權,只能在同一個包中訪問。很明顯,二者不在同一個包中,所以訪問會出錯,修改方法就是把這個方法改為public許可權。
b.public許可權
被public修飾過的方法和變數,對於與該類在同一個包或者非同一個包的類都是可見的(當然了,必須要保證這個方法所在的類也是要public,這樣才比較嚴謹)。
這邊getType因為被修改成了public許可權,所以在不同的包也可以訪問了。
c.private許可權
如果一個方法或者變數是private許可權,則這個類或者方法只能在這個類的內部被訪問,其他地方都 無法訪問(無論是否在同一個包中,都是無法訪問的)
這邊可以看到,Pet類和test類都在Code_180這個包當中,而且Pet類是public類,但是由於getType()是private方法,所以在test類中也無法呼叫這個方法。
d.protected許可權
protected許可權修飾的方法,能在同一個包中被訪問;對於不在同一個包中的類,如果想訪問protected方法的話,那麼這個類應該是該類的子類,而且是通過在子類的內部呼叫父類的protected方法。
這邊雖然Pig類和Pet類在不同的包,但是由於Pig類是Pet類的子類,Pig類內部是可以訪問Pet類的方法的。