来自相同 Class 的其他实例的 Protected/Private 属性的可见性

Visibility of Protected/Private Properties from Other Instances of Same Class

继承和可见性的基本规则如下:

不太明显的是从相同 class 的 另一个实例 访问这些属性的规则,尽管在 the documentation:

发生这种情况是因为该对象可以访问 class 规范。这似乎是由于语言中的一种怪癖实现,尽管我们可以依赖它。我很好奇的是继承链上下游其他对象实例的可见性规则。我期望的是:

这样对吗?

是的,没错。

可见性规则仅基于 classes,实例没有影响。因此,如果 class 可以访问同一实例中的特定成员,它也可以访问该 class 的其他实例中的该成员。

这不是一个怪癖,而是一个深思熟虑的设计选择,类似于许多其他 OO 语言(例如,我认为规则在 C++ 中基本相同)。一旦您授予 class 方法允许了解该 class 或一些相关 class 的实现细节,它正在处理的实例是否就是它并不重要被调用或 class.

的其他实例

不完全是。没错,规则只是基于类,它是同一个实例还是另一个实例并不重要,这基本上是你的问题。

但是,您在 protected 方面大体上犯了一个错误。来自文档:

Members declared protected can be accessed only within the class itself and by inherited and parent classes

(已添加突出显示)

所以,下面的说法是错误的

  1. Accessing protected members from a superclass is not OK.

  2. Accessing protected members from another instance of a superclass is not OK.