只能捕获外部作用域的final对象?
来源:3-3 Java 的匿名内部类有哪些限制?

ZY0127
2021-06-01
public class AnimalTest {
private static String ANIMAL = "动物";
// 鸟类,匿名子类,继承自Animal类,可以覆写父类方法
Animal bird = new Animal("布谷鸟") {
@Override
public void printAnimalName() {
accessTest(); // 访问外部类成员
System.out.println(ANIMAL); // 访问外部类final修饰的变量
super.printAnimalName();
}
};
public static void main(String[] args) {
ANIMAL = "飞禽";
AnimalTest animalTest = new AnimalTest();
animalTest.print();
}
public void accessTest() {
System.out.println("匿名内部类访问其外部类方法");
}
public void print() {
bird.printAnimalName();
}
class Animal {
private final String name;
public Animal(String name) {
this.name = name;
}
public void printAnimalName() {
System.out.println(bird.name);
}
}
}
老师,这里的ANIMAL变量,在main里重新赋值了,不是final,但还是能访问,这是为什么呢?
写回答
1回答
-
bennyhuo
2021-06-02
这是静态变量,全局作用域的。外部作用域final说的是外部的局部变量。
022021-06-03
相似问题