在Java中,匿名内部类可以直接访问外部类的成员变量,只要这些变量是final或者是effectively final。这意味着它们在初始化后不会再改变其值。
以下是一个示例:
public class OuterClass { private String outerVar = "I am from Outer Class"; public void createAnonymousInnerClass() { final String localVar = "I am a local variable"; Runnable runnable = new Runnable() { @Override public void run() { System.out.println("Accessing outer class member: " + outerVar); System.out.println("Accessing effectively final local variable: " + localVar); } }; runnable.run(); } public static void main(String[] args) { OuterClass outer = new OuterClass(); outer.createAnonymousInnerClass(); } }
在这个例子中,我们创建了一个匿名内部类Runnable
,并在其run
方法中访问了外部类的成员变量outerVar
和一个effectively final的局部变量localVar
。当我们运行这个程序时,它将输出:
Accessing outer class member: I am from Outer Class Accessing effectively final local variable: I am a local variable