如題,在看String源碼的某個函數時,發現了這個操作是被允許的,而且可以直接改變private字段(不是final按理是可以改變),這與之前的理解有點相背。
接下來試圖整理下Google來的結論:
Java: Why can I access private fields of other objects?
抽象點的觀點:
因為訪問修飾符在類級別而不是在對象級別上工作。
比較有說服力的觀點:
諸如equals,clone和復制構造函數之類的一些方法在不放棄封裝的情況下編寫起來會很棘手。
其它文章的觀點:
So encapsulation doesn't mean being closed to all of the rest of the world. It means being selective about whom you want to be open to.
所以封裝並不意味着對世界其他所有都封閉,而是意味着選擇你想要對誰開放。