2011-03-23 80 views
4

可能重複:
Why is there no sub-class visibility modifier in Java?如何使和類訪問數據成員的子類只

Java的訪問級別表,顯示了用於控制的成員訪問4個不同的選項類別:

Modifier Class Package Subclass World 
public  Y  Y  Y  Y 
protected Y  Y  Y  N 
no modifier Y  Y  N  N 
private  Y  N  N  N 

但是,沒有修飾符用於「可以上課和子類「。那就是:

Modifier Class Package Subclass World 
c++prot  Y  N  Y  N 

是否有可能在Java中定義這樣的訪問級別?

如果是這樣,怎麼樣?

如果這是不可能的,這必須是由於一個深思熟慮的設計原則。如果是這樣,那是什麼原理。換句話說,爲什麼在Java中具有這樣的訪問級別並不是一個好主意?

+0

@aioobe感謝發現線程內置所以包的概念。我搜索了類似的東西,但由於某種原因無法找到它。那裏的答案非常有教育意義。 +1。 – an00b 2011-03-23 13:34:46

回答

8

設計原則是開發人員不會惡意破解他們自己的程序。如果你不相信同一個包中的類能夠正確行爲,那麼你有嚴重的非技術問題恕我直言。

訪問修飾符用於限制意外錯誤,並嘗試以最小複雜度來阻止大多數錯誤。

順便說一句:與反射/ JNI調用,你可以繞過所有訪問修飾符,所以他們不是一個堅如磐石的安全措施恕我直言。

+5

所以在Java中,開發人員不會惡意破解他們自己的程序,而在C++中他們呢? :) – an00b 2011-03-23 13:32:08

+0

Java在功能上比C++更簡潔。例如,Java甚至不支持signed int,但C++開發人員似乎覺得它很有用。 ;)基本上如果有任何疑問功能是否真的有用它不包括在內。 (例如,甚至關閉不計劃用於Java 7) – 2011-03-23 13:35:02

+0

其不幸的Java不能完成提問者想要的東西。我不使用範圍來阻止壞人攻擊我,我使用範圍來防止我自己攻擊自己。受保護不保護我): – chessofnerd 2014-01-29 21:11:45

2

C++不具有比較C++和Java之間的訪問修飾符時,你應該忽略「包」列:)

+0

是的,我知道。我是一個Java新手,所以我試圖理解語言的思維方式,而不僅僅是語法。 :) – an00b 2011-03-23 13:44:35

相關問題