天天看點

Java語言設計系列-通路權限設計

在java的程式設計中,有去對程式中的類、變量、方法做通路權限設計,比如public關鍵字修飾的允許所有程式通路,有private關鍵字修飾的隻允許類内部通路等。那麼java這樣設計的初衷是什麼呢?

目的: 為了應對程式的變化,并去封裝變化保證調用者的穩定。

舉個例子:

如果你是一個類庫的設計者做了一個類庫供用戶端去調用,并且你所有的變量和方法都允許用戶端去通路,有一天你需要去疊代類庫,你會發現你不敢去删除任何變量或者方法,因為你不确定這個變量是否有被用戶端使用如果一旦删除很有可能使用戶端報錯,是以java設計中有通路權限設計,你可以根據需要把成員變量設計為私有并暴露公共的方法供用戶端調用,這樣當你去疊代類庫時就很清晰知道什麼是可以動的什麼是不能動的了perfect。

java他是怎樣去做通路權限的設計呢?java借鑒了linux的檔案系統理念引入了包的概念,其中包中包含多個檔案或者其他包,每個檔案中隻允許有一個外部可通路的類。基于包的概念用關鍵詞去修飾權限,分别有public,protected,default(可省略)和private,權限如下表:

關鍵詞

本類

子類

本包

非子類的其他包

public

protected

×

default

private

public關鍵詞修飾的類、變量或者方法允許包内或者包外的程式通路。

protected關鍵字主要服務于類的繼承,它允許繼承父類的子類有父類protected修飾的變量和方法的通路權限。

default修飾時可以預設省略,它允許本包的其他程式通路。

private是最嚴格的關鍵詞,隻允許類内部通路。

從上述我們也就知道,它設計的出發就是去如果3個作用空間的權限:

①類作用空間

②繼承空間

③包空間