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,并且可以看到彼此的私有成员。