Java中的类实例可以访问其自己类型的不同实例的私有字段,例如在以下列表中:
public class Foo {
private int secret;
public void bar(final Foo foo) {
foo.secret = 100;
}
}
这种语义的论据是什么(在设计语言时)?
答案 0 :(得分:14)
嗯,首先你要问"为什么要有私人领域?"
私有字段主要用于封装:一个类的用户不应该知道该类的内部结构'实现。事实上,他们不应该知道,因为如果他们依赖于那些细节,那么实施者将被迫支持它们或者破坏向后兼容性。换句话说,它保护了类的用户和设计者:
但是一个班级不需要保护自己;它不需要担心其代码的一位改变的情况,但另一位(使用第一位)不能改变。向后兼容性不是问题,因为该类是作为单个原子代码块开发的。换句话说,上述保护措施都不需要。
由于不需要保护字段,并且因为它们经常需要看到它们(例如,比较两个对象是否相等),它们在课堂上可见
答案 1 :(得分:4)
private
字段旨在告诉其他程序员不要弄乱它。
据推测,在一个班级工作的每个人都知道所有变量的作用。 private
字段无法从外部隐藏您自己的代码。
答案 2 :(得分:1)
您可以在没有其他getter的情况下复制/比较值,也可以在没有setter的情况下更改字段不知道在JVM中这样的简单方法调用是否以任何方式进行了优化,但如果没有,则会产生一些开销。
有人可能认为保持这种“开放”访问可能会导致一些安全问题,但在实现类时,您提供了操作这些变量的所有方法。没有人可以从扩展此类的类中更改它们。事实上,它们仍然是私密的 - 只能从您的代码中访问。
还要记住,逻辑上一个班往往注定要做一份工作。共享一些信息和简化访问可能是有益的,尤其是在生成大量实例的情况下。在处理需要更多控制的情况时,可以始终使用包访问修饰符(在某种意义上更“私有”......)或使用单例/工厂模式限制实例计数。