Java私有字段可见性


问题内容

因此,前几天我正在上一堂课,当我意识到它会生成以下 工作 代码时,使用Eclipse的方法来创建equals方法:

class Test {
  private int privateInt;
  [...]
  public boolean equals(Object obj) {
    [...]
    Test t = (Test) obj;
    if ( t.privateInt == privateInt ) {
    [...]
  }
}

t.privateInt .. ???? 应该是私人的!因此,我想除了私有,受保护,受包保护和公共之外,还有其他领域可见性。

那么这里发生了什么?这个怎么称呼? 有人在哪里使用呢? 这不是中断封装吗?如果班上没有变种人而我改变了该怎么办?C
++也会发生这种情况吗?这是一个面向对象的习惯用法吗?如果没有,那么Java为什么要这么做?

通常,在哪里可以找到有关此信息?

谢谢。


问题答案:

可从同一类的不同实例进行访问。

根据此页面(正在轰炸我):

在成员级别,您也可以像顶级类一样使用public修饰符或不使用修饰符(package-
private),并且含义相同。对于成员,还有两个附加的访问修饰符:私有和保护。 private修饰符指定只能在其自己的类中访问该成员。

为了清楚起见,我将重写此行:

if ( t.privateInt == this.privateInt )

我们可以同意应该允许“ this.privateInt”:您是在类Test的实例中访问它的,消息“ equals”已发送到该实例。

不太清楚“
t.privateInt”应该是可见的,因为t是Test类的单独实例,我们不在其equals方法内执行。但是java允许这样做,因为两个对象(t和this)属于同一类Test,并且可以看到彼此的私有成员。