在Java中,类的一个实例可以访问其自身类型的另一个实例的私有字段,例如以下列表中所示:
public class Foo {
private int secret;
public void bar(final Foo foo) {
foo.secret = 100;
}
}
设计语言时,这样的语义学有什么论据?
首先,你必须问自己“为什么需要私有字段?”
私有字段主要是用于封装:类的消费者不应该知道该类实现的内部细节,事实上,这些细节应该被积极地隐藏。否则,如果用户依赖于这些内部细节,则实现者将被迫支持它们或破坏向后兼容性。换句话说,它保护了类的用户和设计者:
但是,一个类不需要保护自身;它不需要担心其代码中的某一部分发生更改,而另一部分(使用第一部分)无法更改的情况。向后兼容性不是问题,因为该类作为单个原子代码块开发和部署。换句话说,以上两种保护都不是必需的。
由于没有必要保护字段,并且通常需要查看它们(例如,比较两个对象是否相等),所以它们在类内部可见。
private
字段的作用是告诉其他程序员不要操作它。
可以想象,在同一个类中工作的所有人都知道所有变量的作用。 private
字段并没有将您自己的代码隐藏,只是隐藏了外部的访问。
secret
,那就不要更新它。编程不能保护你免受自己的伤害。 - markspaceequals(Foo other)
方法呢? - Thilo