目前,我正在做 Oracle 的嵌套类教程,在影子部分我有一些我根本不理解的东西。
方法methodInFirstLevel
的第二行执行代码打印出this.x
的值,但在main方法中我们已经将参数23传递给了新对象实例的方法的参数。那么为什么 FirstLevel
的 int x
仍然回到 1 呢? this
关键字不应该引用对象实例吗?
public class ShadowTest {
public int x = 0;
class FirstLevel {
public int x = 1;
void methodInFirstLevel (int x) {
System.out.println("x = " + x);
System.out.println("this.x = " + this.x);
System.out.println("ShadowTest.this.x = " + ShadowTest.this.x);
}
}
public static void main(String[] args) {
ShadowTest st = new ShadowTest();
ShadowTest.FirstLevel f1 = st.new FirstLevel();
f1.methodInFirstLevel(23);
}
}
输出为:
x = 23
this.x = 1
ShadowTest.this.x = 0
最佳答案
该代码块中没有发生任何分配。
void methodInFirstLevel (int x) {
System.out.println("x = " + x);
System.out.println("this.x = " + this.x);
System.out.println("ShadowTest.this.x = " + ShadowTest.this.x);
}
参数 x 从未分配给 this.x 或 ShadowTest.this.x , 因此两个值保持相同。
要将 this.x 值更改为 23,您必须将其设置为
this.x =x;
关于java - 内部类实例变量遮蔽,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32472474/