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

佩图尔·英吉·埃格森

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

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

在设计语言时,这种语义的论点是什么?

伊沙维特

好吧,首先,您必须问“为什么根本没有私有领域?”

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

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

但是,不需要保护一个类本身。它不需要担心代码的某一位发生变化,而另一位(使用第一位)不变的情况。向后兼容性不是问题,因为该类是作为单个原子代码块开发的。换句话说,以上保护都不是必需的。

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

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

类方法如何访问相同类的另一个实例的私有成员?

来自分类Dev

从另一个类访问变量的实例

来自分类Dev

如何从另一个类访问实例化?

来自分类Dev

为什么我不能将一个泛型类型的实例转换为另一个实例?

来自分类Dev

使用另一个类实例访问一个类方法?

来自分类Dev

无法从另一个类访问私有字段的属性

来自分类Dev

是否可以从另一个文件访问python文件中声明的类的特定实例?

来自分类Dev

为什么可以使用具有来自另一个类的私有集访问权限的集合初始化程序?

来自分类Dev

是否可以创建一个类,其每个实例将具有不同的类型?

来自分类Dev

一个类具有另一个类的实例的JVM初始化顺序是什么

来自分类Dev

当实例来自另一个类时,如何访问超类的实例?

来自分类Dev

为什么从另一个类执行此私有方法?

来自分类Dev

在另一个实例化一个类的首选方法是什么?

来自分类Dev

一个类的实例可以更改另一个类的实例中的变量吗?

来自分类Dev

Python:对于超类中定义的运算符,我可以有一个子类返回其自身类型的实例吗?

来自分类Dev

如何通过在Javascript另一个类的实例访问另一个类中的方法

来自分类Dev

为什么有两个“Okular”实例,我如何摆脱另一个实例?

来自分类Dev

在实例方法中“自身”与另一个变量的本地绑定是否可以接受?

来自分类Dev

自动将类型类实例设为另一个实例

来自分类Dev

在另一个类实例中获取一个类实例的变量的值

来自分类Dev

将一个类实例转换为另一个类的实例

来自分类Dev

C ++-如何在另一个类中使用私有构造函数实例化对象

来自分类Dev

如何将一个类实例传递给另一个类,以便可以对其进行修改?

来自分类Dev

为什么抽象类可以有一个实例方法?

来自分类Dev

是否可以创建一个只能作为另一个类的成员实例但仍可以通过VB.NET公开访问的类?

来自分类Dev

为什么修改一个实例的值会更改另一个实例的值?

来自分类Dev

如何将一个类的实例方法与另一个实例化?

来自分类Dev

从JavaScript中的另一个实例实例化一个类?

来自分类Dev

如何将一个类的实例方法与另一个实例化?

Related 相关文章

  1. 1

    类方法如何访问相同类的另一个实例的私有成员?

  2. 2

    从另一个类访问变量的实例

  3. 3

    如何从另一个类访问实例化?

  4. 4

    为什么我不能将一个泛型类型的实例转换为另一个实例?

  5. 5

    使用另一个类实例访问一个类方法?

  6. 6

    无法从另一个类访问私有字段的属性

  7. 7

    是否可以从另一个文件访问python文件中声明的类的特定实例?

  8. 8

    为什么可以使用具有来自另一个类的私有集访问权限的集合初始化程序?

  9. 9

    是否可以创建一个类,其每个实例将具有不同的类型?

  10. 10

    一个类具有另一个类的实例的JVM初始化顺序是什么

  11. 11

    当实例来自另一个类时,如何访问超类的实例?

  12. 12

    为什么从另一个类执行此私有方法?

  13. 13

    在另一个实例化一个类的首选方法是什么?

  14. 14

    一个类的实例可以更改另一个类的实例中的变量吗?

  15. 15

    Python:对于超类中定义的运算符,我可以有一个子类返回其自身类型的实例吗?

  16. 16

    如何通过在Javascript另一个类的实例访问另一个类中的方法

  17. 17

    为什么有两个“Okular”实例,我如何摆脱另一个实例?

  18. 18

    在实例方法中“自身”与另一个变量的本地绑定是否可以接受?

  19. 19

    自动将类型类实例设为另一个实例

  20. 20

    在另一个类实例中获取一个类实例的变量的值

  21. 21

    将一个类实例转换为另一个类的实例

  22. 22

    C ++-如何在另一个类中使用私有构造函数实例化对象

  23. 23

    如何将一个类实例传递给另一个类,以便可以对其进行修改?

  24. 24

    为什么抽象类可以有一个实例方法?

  25. 25

    是否可以创建一个只能作为另一个类的成员实例但仍可以通过VB.NET公开访问的类?

  26. 26

    为什么修改一个实例的值会更改另一个实例的值?

  27. 27

    如何将一个类的实例方法与另一个实例化?

  28. 28

    从JavaScript中的另一个实例实例化一个类?

  29. 29

    如何将一个类的实例方法与另一个实例化?

热门标签

归档