需显式引用外部类变量是因为内部类同名成员会遮蔽外部类变量,Java不自动向上查找,必须用“外部类名.this.变量名”访问;静态内部类无法使用Outer.this,只能访问外部类静态成员。

在 Java 中,内部类访问外部类的同名变量,需用 外部类名.this.变量名 显式指定,避免与内部类自身变量混淆。
为什么需要显式引用?
当内部类定义了与外部类同名的字段或局部变量时,直接使用变量名会优先访问内部类自身的成员。Java 不会自动“向上查找”外部类变量,必须明确指出作用域。
语法:用 “外部类名.this” 访问外部类成员
这是唯一标准方式。假设外部类叫 Outer,内部类叫 Inner,外部类有个字段 x:
- 在 Inner 中写 Outer.this.x → 访问外部类的 x
- 只写 x → 访问的是 Inner 自己的 x(如果有)或编译报错(如果没有)
常见场景示例
比如外部类和内部类都定义了 int x:
立即学习“Java免费学习笔记(深入)”;
class Outer {
int x = 10;
class Inner {
int x = 20;
void print() {
System.out.println(x); // 输出 20(内部类自己的 x)
System.out.println(this.x); // 输出 20(等价于上面)
System.out.println(Outer.this.x); // 输出 10(外部类的 x)
}
}
}
注意静态内部类的限制
静态内部类(static nested class)不能直接访问外部类的实例成员,因为它不持有对外部类实例的隐式引用。此时 Outer.this 无效,只能访问外部类的 static 成员。如需访问实例变量,需显式传入外部类实例。


















