場景1:工程師A編寫了一個類ClassA,但是工程師A並不希望ClassA被該應用中其他所用的類都訪問到,那麼該如何處理?
場景2:如果工程師A編寫了一個類ClassA,其中有兩個方法fun1、fun2,工程師只想讓fun1對外可見,也就是說,如果別的工程師來調用ClassA,只可以調用方法fun1,那麼該怎麼處理?
此時,訪問權限控制便可以起到作用了。
在Java中,提供了四種訪問權限控制:默認訪問權限(包訪問權限),public,private以及protected。
一、Java中有四種訪問權限
private、default(一般省略)、public、protected
private : Java語言中對訪問權限限制的最窄的修飾符,一般稱之爲“私有的”。被其修飾的屬性以及方法只能被該類的對象訪問,其子類不能訪問,更不能允許跨包訪問。
default: 即不加任何訪問修飾符,通常稱爲“默認訪問權限“或者“包訪問權限”。該模式下,只允許在同一個包中進行訪問。
protected: 介於public 和 private 之間的一種訪問修飾符,一般稱之爲“保護訪問權限”。被其修飾的屬性以及方法只能被類本身的方法及子類訪問,即使子類在不同的包中也可以訪問。
public: Java語言中訪問限制最寬的修飾符,一般稱之爲“公共的”。被其修飾的類、屬性以及方法不僅可以跨類訪問,而且允許跨包訪問。
注意
- 上述四種訪問權限,只有默認訪問權限和public能夠用來修飾類。修飾類的變量和方法四種權限都可以。(本處所說的類針對的是外部類,不包括內部類)
- 所謂的訪問,可以分爲兩種不同方式:
- 第一,通過對象實例訪問;
- 第二,直接訪問。
比如說,某父類protected權限的成員,子類是可以直接訪問的,換一種說話是子類其實繼承了父類的除了private成員外的所有成員,包括protected成員,所以與其說是子類訪問了父類的protected成員,不如說子類訪問了自己的從父類繼承來的protected成員。
另一方面,如果該子類與父類不在同一個包裏,那麼通過父類的對象實例是不能訪問父類的protected成員的。
二、下面用表格來展示四種修飾符的訪問權限範圍:
三 、關於Java包和類文件的知識:
- Java中的包 主要是爲了防止類文件命名衝突以及方便進行代碼組織和管理;
- 對於一個Java源代碼文件,如果存在public類的話,只能有一個public類,且此時源代碼文件的名稱必須和public類的名稱完全相同,另外,如果還存在其他類,這些類在包外是不可見的
- 如果源代碼文件沒有public類,則源代碼文件的名稱可以隨意命名。
參考 :
- https://blog.csdn.net/itachiyang/article/details/43647909
- https://zhuanlan.zhihu.com/p/81440851
- https://www.cnblogs.com/dolphin0520/p/3734915.html