權限

      在〈權限〉中尚無留言

存取權限可視範圍

到目前為止, 存取修飾子只看過public 及private. 但實際上存取修飾子有四個, private, 預設, protected, public. 下面的表格為可視範圍, 非常重要, 非背不可

 修飾子 相同class 子類別於
相同package
子類別於
不同package
Universe
 private  Yes      
 default Yes Yes    
protected Yes Yes Yes*  
 public Yes Yes Yes Yes

預設權限

預設權限是指沒有任何權限修飾子. 口訣 : 預設權限在相同package裏如同public, 不同package如同private. 

可以把不同的package想像成是不同的公司寫出來的. 比如 package A是A公司寫的SDK, package B 是B公司寫的SDK.

A公司的RD為了開發方便, 都不愛寫權限. 所以在package A裏, 這些變數及方法都是public, 可以call來call去的, 相當便利. 但當這SDK賣出去給B公司後, A package裏的東西即變成private鎖住, 讓B公司的人不能看到裏面的資訊.

因此上面的口訣可以變成 : 預設權限在相同的公司裏, 如同public, 不同的公司裏, 如同private.

protected

當SDK A賣給B公司後, B公司的RD人員總是會靠北說, 這個也鎖, 那個也鎖, 怎麼那麼難用. 這時A公司就可以把想開放給B公司RD人員的變數改為protected. 這樣一來, B公司的RD人員只要繼承SDK A的類別, 就可以在子類別更改protected的變數.

但一離開子類別, 產生物件後, 這個protected變數又變成不可存取的private, 讓後面的使用者不能隨意更改. 這種專為別家公司的RD人員所設計的權限, 叫protected, 又稱為package friendly.

java_package2

記憶方法

無修飾詞:封裝(package)內有效。
private:僅類別(class)內有效。
protected:封裝(package)內及子類別(subclasses)內有效。

permission

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *