protected
主要用於效用和輔助方法一類的內部。它們並不意味着可以從外部訪問,如private
方法。
然而,延伸類可能需要訪問這些方法或甚至修改它們。所以基本上它是就像private
,其存在的權利應該是明確的,但是你想讓擴展類有機會也可以訪問它。
這種情況經常發生,他們決定在該語言中包含protected
。如果您有其他願望或設計建議,請隨時分享。
這裏是經常引用overview table:
| Class | Package | Subclass | Subclass | World
| | |(same pkg)|(diff pkg)|
————————————+———————+—————————+——————————+——————————+————————
public | + | + | + | + | +
————————————+———————+—————————+——————————+——————————+————————
protected | + | + | + | + |
————————————+———————+—————————+——————————+——————————+————————
no modifier | + | + | + | |
————————————+———————+—————————+——————————+——————————+————————
private | + | | | |
+ : accessible
blank : not accessible
想想,你提供一些abstract
基類,像AbstractMap
的例子。它可以有一種重新安排內部事物的方法。
您可以製作方法private
,但您也可以製作protected
,因爲擴展類可以通過覆蓋來更改重新排列過程。如果擴展類由於其特定的結構,可以使用額外的知識來創建更高效的方法,這可能會很有用。
什麼是錯誤信息? –
爲什麼你認爲它*應該*編譯? –
OP不認爲它應該編譯。他也沒有要求程序不編譯的原因。 OP想知道Java中這種設計選擇的原因。 – Zabuza