Java訪問控制權限
Java的訪問控制權限相比于C++等語言可能稍微復雜一點,不過也不難理解。Java的訪問控制權限分為兩塊——“類或接口的訪問控制權限”與“變量和方法的訪問控制權限”。
1.類或接口的訪問控制權限
類或接口的訪問控制權限是指能不能用該類建立對象,接口能不能被實現等等。能夠修飾類或接口的訪問控制權限的修飾符(modifier)只有兩個——public和friendly.不過,值得一說的是friendly并不是Java的關鍵字,它只是一個習慣叫法,指的是“沒有寫訪問控制權限修飾符”的情況。
public修飾的類或接口在同一個包中的任何一個類中都可以被訪問。不同包呢?當然能訪問啦,否則引包機制不就失效了嘛(因為引包相當于拿到了一個包的public類或接口)。
friendly修飾的類或接口在同一個包中的任何一個類中都可以被訪問(和public相同),不能被不同包中的類訪問。
總結:類或接口的訪問控制權限分為“包中”和“包外”。無論修飾符(modifier)是什么,在“包中”均可訪問。對于“包外”,public修飾的類或接口可以被訪問,friendly修飾的類或接口不能被訪問。
2.變量和方法的訪問控制權限
變量和方法的訪問控制權限的修飾符(modifier)有四個——public,protected,friendly和private.
變量和方法在本類(定義該變量或方法的類)中不論訪問控制權限修飾符是什么,均可被訪問(這里先不考慮“靜態”的情況)。那么接下來只研究類外。類外也分“包內”和“包外”,接下來就從這兩方面說起,并且研究“包外”時只考慮引入的包中的public類,因為friendly的類連直接被訪問都做不到,何談訪問變量和方法。
public修飾的變量和方法在“包內”和“包外”均可被訪問。
protected修飾的變量和方法在“包內”可以被訪問,在“包外”只能被子類訪問。
friendly修飾的變量和方法在“包內”可以被訪問,在“包外”不能被訪問。
private修飾的變量和方法在“包內”或“包外”均不能被訪問。
總結:對于“類外”,public,protected,friendly和private的嚴格性逐漸遞增。public可以說沒限制,protected剝奪了“包外”非子類的訪問能力,friendly在protected基礎上進一步剝奪了“包外”子類的訪問能力,至此“包外”的訪問能力全無;private更嚴格,它在friendly基礎上更是一下剝奪了“包內”的訪問能力。
總的來說,看某個成員能否被訪問要分兩步:1.根據所在類的訪問控制權限看該類能否被訪問;2.根據該成員的訪問控制權限判斷取得所在類后該成員能否被訪問。
posted on 2014-07-29 09:24 順其自然EVO 閱讀(190) 評論(0) 編輯 收藏 所屬分類: 測試學習專欄