程序邏輯上的組織方式(如名稱空間,包等)可以和部署時的分發方式(如程序集,jar包等)不同,那麼不同class間的相互訪問權限應該在邏輯組織上限制還是物理分發上限制呢?
Java | 語言本身 | 採用了對邏輯組織方式進行限制,即你可以訪問java.lang中的私有類而能夠通過編譯,只要你自己的代碼也以java.lang爲包名[我猜的,沒試過] |
運行時 | 採用了對物理分發方式進行限制,可能跟缺省的ClassLoader有關,即使你通過編譯了,但部署時同一包名下的類分成了不同的jar包,那麼對私有類的訪問可能會出錯[我猜的,沒試過] | |
.Net | CLS | 不知道,希望補充 |
C# | 對物理分發方式即程序集進行限制,從語言到運行時都是如此 |
個人傾向於C#的權限控制,合理且靈活;Java中當邏輯和物理組織不同時,不是被迫把一個class彆扭的挪到當前package,就是把它聲明爲public,而一旦聲明爲public,你就再也控制不了了
傳統的訪問控制已超出了語言本身的範圍,屬於平臺特性了