当前位置:  开发笔记 > 编程语言 > 正文

Java私有字段可见性

如何解决《Java私有字段可见性》经验,为你挑选了1个好方法。

所以前几天我正在创建一个类,当我意识到它生成了以下工作代码时,使用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会这样做呢?

一般来说,我在哪里可以找到有关此信息?

谢谢.



1> Michael Shar..:

它可以从同一个类的不同实例访问.

根据这个页面(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,并且可以看到彼此的私有成员.


作为另一个无用的琐事,`private`自从它第一次出现在Simula-67之后就已经这样工作了(它在那里被称为`hidden`,但它也是3个经典私有/受保护/公共等级中的一个,它起作用了与C++,Java,C#等人的完全一样.
推荐阅读
mobiledu2402851377
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有