当前位置: 首页 > 面试题库 >

Java私有字段可见性

佴涵蓄
2023-03-14
问题内容

因此,前几天我正在上一堂课,当我意识到它会生成以下 工作 代码时,使用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,并且可以看到彼此的私有成员。



 类似资料:
  • 我试图理解为什么在谈到构造函数时,类成员的可访问性之间存在差异。 考虑下面的例子: 的私有成员作为私有成员,不应从访问。对于字段和方法,情况确实如此,但构造函数似乎没有遵循相同的规则。 从JLS-8(6.6.1.确定可访问性)中,我们可以阅读: [...] 引用类型的成员(类、接口、字段或方法)或类类型的构造函数只有在类型可访问且声明该成员或构造函数允许访问时才可访问: > [……] 否则,成员或

  • 我目前正在开发一个程序,在我的子类中,我需要一个无参数构造函数,用空字符串初始化对象。 我尝试过使用super,我有setter和getter方法,但我一直得到“field Person.name不可见”。我得到这个地址和电话号码以及。 如何使其可见,并且我可以在不提供构造函数参数的情况下初始化对象?如果我做错了什么并需要修复某些内容,请告诉我(:

  • 问题内容: 我想知道是否有一种方法可以获取java中某个类的所有私有字段及其类型。 例如,假设我有一堂课 现在,我想获得的所有私有字段(,,类)(如果不知道所有领域前期的名称),并检查它们的类型。 问题答案: 有可能获得与方法的所有字段的。然后,您必须检查每个字段的修饰符以查找私有字段: 请注意,这不会返回继承的字段。 最终,您可以使用Field.getType()方法获得字段的类型。

  • 现在,我想获取类的所有私有字段(、、)(事先不知道所有字段的名称)并检查它们的类型。

  • 问题内容: 这是一个面试问题。 子类是否继承私有字段? 我回答“否”,因为我们无法使用“常规OOP方式”访问它们。但是访问者认为它们是继承的,因为我们可以间接或使用反射来访问这些字段,并且它们仍然存在于对象中。 回来后,我在javadoc中找到了以下引号: 超类私人成员 子类不继承其父类的私有成员。 你知道面试官的观点有什么论据吗? 问题答案: 这里的问题/答案中的大多数困惑都围绕着继承的定义。

  • 问题内容: Java中是否可以通过反射访问私有字段str?例如获取该字段的值。 问题答案: 是。 然后,使用字段对象获取类实例上的值。 请注意,方法通常会使人们感到困惑。你有该字段,但没有该对象的实例。你必须将其传递给方法