gpt4 book ai didi

java - 在 (*) 中可以访问多少个不同版本的 'x'?

转载 作者:IT老高 更新时间:2023-10-28 21:18:31 27 4
gpt4 key购买 nike

这是一个了解 Java 内部类工作原理的培训练习。正如问题所述,在 (*) 中可以访问多少个不同版本的 x

class Outer {
int x;

class Inner extends Outer {
int x;

void f(int x) {
(*)
}
}
}

我倾向于认为有 3 个,即:this.xsuper.xx 但我的一些同行似乎认为有 4 个。

我们谁感到困惑?你能解释一下吗?

最佳答案

有4个,分别是:xthis.xsuper.xOuter.this.x.

考虑以下几点:

public class Outer {

int x;

public static void main(String[] args) {
Outer outer = new Outer();
Outer.Inner inner = outer.new Inner();
outer.x = 3;
inner.x = 2;
inner.f(1);
}

class Inner extends Outer {
int x;

void f(int x) {
System.out.println(super.x);
System.out.println(x);
System.out.println(this.x);
System.out.println(Outer.this.x);
}
}

}

这段代码会打印出来

0
1
2
3

显示 4 个不同的值。

发生的事情如下:

  1. inner 实例的父级有一个未初始化的 x 变量。对于 int,默认值为 0:即 super.x
  2. 使用参数1调用方法f:这是x
  3. 实例 inner 已将其 x 设置为 2,其中 inner.x = 2:这是 this.x
  4. outer 实例,即 Outer.this 已将其 x 值设置为 3:这是 Outer.this。 x.

这里的诀窍是 Inner 都是 inner class (所以它有一个封闭的 Outer 实例)和一个 subclass (所以它有一个父 Outer 实例),而这两个 Outer 实例并不相同。

关于java - 在 (*) 中可以访问多少个不同版本的 'x'?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34755461/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com