Java内部类访问外部类成员需依类型区分:成员内部类可直接访问所有成员(含private),同名时用Outer.this.显式访问;静态内部类仅能访问外部类静态成员;局部/匿名类还可访问effectively final局部变量。

Java 中内部类能直接访问外部类所有成员,包括私有字段和方法,但访问方式取决于是否同名、是否静态、以及内部类类型。关键在于理解作用域和引用关系。
成员内部类访问外部类成员
成员内部类(非 static)天然持有外部类实例引用,因此可无条件访问外部类任意成员:
- 直接写字段名或方法名,就能访问外部类的 public、protected、默认、private 成员
- 若内部类中定义了与外部类同名的字段或方法,就近原则生效:默认访问的是内部类自己的成员
- 要明确访问被遮蔽的外部类同名成员,必须用 外部类名.this.成员名,例如
Outer.this.name - 不能在成员内部类中定义普通静态成员(static 变量或方法),只允许
static final常量
静态内部类访问外部类成员
静态内部类不依赖外部类实例,因此访问权限受限:
- 不能访问外部类的非静态成员(实例字段、实例方法)
- 只能访问外部类的静态成员,且直接用 外部类名.静态成员名,例如
Outer.count - 不能使用
Outer.this,因为静态内部类没有隐式外部类实例引用
方法内局部内部类和匿名内部类
这类内部类定义在方法或代码块中,访问规则略有不同:
立即学习“Java免费学习笔记(深入)”;
- 可以访问外部类所有成员(同成员内部类)
- 还能访问所在方法的 final 或 effectively final 局部变量(Java 8+)
- 若方法中局部变量与外部类字段同名,想访问外部类字段,仍需写
Outer.this.field - 不能声明为 public、protected、private 或 static
外部类如何访问内部类成员
外部类不能直接使用内部类成员,必须先创建内部类实例:
- 成员内部类对象必须依附于外部类实例,创建语法为:
outerInstance.new Inner() - 静态内部类对象可独立创建:
new Outer.StaticInner() - 创建后,通过对象引用访问其 public 成员;若为 private 成员,需提供公共方法间接访问
- 外部类的静态方法中创建成员内部类时,必须先 new 出外部类实例


















