为什么类的实例可以访问其自己类型的另一个实例的私有字段?

Pét*_*son 17 java dsl semantics

Java中的类实例可以访问其自己类型的不同实例的私有字段,例如在以下列表中:

public class Foo {
  private int secret;
  public void bar(final Foo foo) {
    foo.secret = 100;
  }
}
Run Code Online (Sandbox Code Playgroud)

这种语义(设计语言时)的论据是什么?

ysh*_*vit 15

那么,首先你要问"为什么要有私人田地?"

私有字段主要用于封装:一个类的用户不应该知道该类的实现的内部.实际上,他们不应该知道,因为如果他们依赖于那些细节,那么实施者将被迫支持他们或打破向后兼容性.换句话说,它保护了类的用户和设计者:

  • 保护用户免受实施更改破坏她的代码
  • 保护设计者不必永远保持实现细节功能不变

但是一个班级不需要保护自己; 它不需要担心其代码的一位改变的情况,但另一位(使用第一位)不能改变.向后兼容性不是问题,因为该类是作为单个原子代码块开发的.换句话说,上述保护都不是必需的.

由于不需要保护字段,因为通常需要查看它们(例如,比较两个对象是否相等),它们在类中是可见的.


Rya*_*ein 6

private字段旨在告诉其他程序员不要乱用它。

据推测,在一个班级中工作的每个人都知道所有变量的作用。该private字段不会向您隐藏您自己的代码,只是从外部隐藏。