java中4種修飾符訪問權限的區別及詳解全過程
http://jingyan.baidu.com/article/fedf0737700b3335ac8977ca.html
java中4中修飾符分別為public、protect、default、private,他們這就說明了面向對象的封裝性,所以我們要適用他們盡可能的讓權限降到最低,從而安全性提高。
下面詳細講述下它們的訪問權限問題。(同一個類中除內部類外所有修飾符都是可以訪問的,所以下面排除這種情況。)
首先在這里把它們的訪問權限表示出來:
訪問權限 類 包 子類 其他包
public ∨ ∨ ∨ ∨
protect ∨ ∨ ∨ ×
default ∨ ∨ × ×
private ∨ × × ×
下面做進一步說明java中4種修飾符訪問權限的區別及詳解全過程:
方法/步驟
-
首先,說明public的權限問題,定義4個類Person、People、Student、Computer,分別比較本類、同包、子類、其他包的區別。
這里要注意:當重寫父類成員函數時,子類的成員函數不能比父類的成員函數權限小,一般重寫把權限定義相同即可。
代碼如圖所示:
-
上邊把類都建好了,然后開始測試,如果均能編譯通過,就說明用public修飾的類在本類、同包、子類、其他包中互相訪問都是可以的。測試結果如下:(事實證明可以訪問)
-
再來說明protect權限問題,同樣定義4個類Person、People、Student、Computer,分別比較本類、同包、子類、其他包的區別。
這里要注意:public可以修飾任何類而且類名要與文件名相同,protected不可以修飾類。
Person代碼如圖所示,其他3個類同上:
-
同樣開始測試protected權限問題,如果Person、People、Student能編譯通過,就說明用protected修飾的類在本類、同包、子類中互相訪問都是可以的,而Computer編譯不通過說明protected不可以在包外沒有繼承關系的類中互相訪問。測試結果如下:
-
接着說明default權限問題,同樣定義4個類Person、People、Student、Computer,分別比較本類、同包、子類、其他包的區別。
這里要注意:default(不寫默認指定default)同public一樣可以修飾任何類而且類名要與文件名相同。
Person代碼如圖所示,其他3個類同上:
-
繼續開始測試default權限問題,如果Person、People能編譯通過,就說明用default修飾的類在本類、同包中互相訪問都是可以的,而Student、Computer編譯不通過說明default不可以在包外不管有沒有繼承關系的類都不可以互相訪問。測試結果如下:
-
最后說明private權限問題,同樣定義4個類Person、People、Student、Computer,分別比較本類、同包、子類、其他包的區別。
這里要注意:private同protected一樣不可以修飾類。
Person代碼如圖所示,其他3個類同上:
-
最后測試private權限問題,private意思是私有的,如果Person能編譯通過而People、Student、Computer編譯不通過,就說明用private修飾的類只能在本類中訪問。測試結果如下:
-
綜上所述,java中4種修飾符訪問權限的區別及詳解全過程就此演示完了,再一次說明java語言的嚴謹性和安全性,我們在以后使用這4中修飾符時創建一個類,這個類的權限盡量要小,這樣才能減少漏洞和提高安全性,從而體現java面向對象的封裝性。
最后如圖再回憶一下java中4個修飾符的訪問權限: