有 4 个,即:、、 和 。x
this.x
super.x
Outer.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 个不同的值。
正在发生的事情如下:
- 实例的父级具有单元化变量。对于 ,默认值为 0:这是 。
inner
x
int
super.x
- 该方法用参数调用:这是 。
f
1
x
- 该实例设置为 2,并带有 :这是 。
inner
x
inner.x = 2
this.x
- 该实例的值设置为 3:这是 。
outer
Outer.this
x
Outer.this.x
这里的诀窍是,它既是一个内部类(所以它有一个封闭的实例)又是一个子类(所以它有一个父实例),而这两个实例是不一样的。Inner
Outer
Outer
Outer