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

2022-09-01 23:30:12

在 Java 中,类的实例可以访问其自身类型的不同实例的私有字段,如以下清单所示:

public class Foo {
  private int secret;
  public void bar(final Foo foo) {
    foo.secret = 100;
  }
}

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


答案 1

首先,你必须问“为什么有私人田地?

私有字段主要用于封装:类的使用者不必知道该类实现的内部,实际上,这些内部应主动隐藏给使用者。否则,如果用户依赖于这些内部结构,那么实现者将被迫支持它们或破坏向后兼容性。换句话说,它保护了类的用户和设计者:

  • 保护用户免受破坏其代码的实现更改的影响
  • 设计人员受到保护,不必永远保持实现细节功能不变

但是一个类不需要保护自己;它不需要担心其代码的一个位更改,但另一个位(使用第一个位)无法更改的情况。向后兼容性不是问题,因为该类是作为单个原子代码块开发和部署的。换句话说,上述两种保护都不需要。

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


答案 2

该字段旨在告诉其他程序员不要搞砸它。private

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


推荐