Java 同一个类的不同实例对象竟然可以相互访问各自的private成员
如题,在看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.
所以封装并不意味着对世界其他所有都封闭,而是意味着选择你想要对谁开放。