所以前几天我正在创建一个类,当我意识到它生成了以下工作代码时,使用Eclipse的方法创建了equals方法:
class Test { private int privateInt; [...] public boolean equals(Object obj) { [...] Test t = (Test) obj; if ( t.privateInt == privateInt ) { [...] } }
t.privateInt .. ???? 它假设是私人的!所以我想除了私有,受保护,包保护和公共之外还有一个字段可见性.
那么这里发生了什么?怎么称呼?有人会用这个吗?这不会破坏封装吗?如果班级没有改变者并且我改变了这个怎么办?这也发生在C++上吗?这是一个OO成语吗?如果没有,那为什么Java会这样做呢?
一般来说,我在哪里可以找到有关此信息?
谢谢.
它可以从同一个类的不同实例访问.
根据这个页面(bolding mine):
在成员级别,您也可以使用public修饰符或no修饰符(package-private),就像使用顶级类一样,并且具有相同的含义.对于成员,还有两个额外的访问修饰符:private和protected.private修饰符指定只能在自己的类中访问该成员.
为清楚起见,我将重写这一行:
if ( t.privateInt == this.privateInt )
我们可以同意应该允许"this.privateInt":您正在类Test的实例中访问它,消息"equals"已被发送到.
不太清楚"t.privateInt"应该是可见的,因为t是Test类的一个单独实例,我们不在其equals方法中执行.但是java允许这样做,因为两个对象(t和this)属于同一个类Test,并且可以看到彼此的私有成员.