只能捕获外部作用域的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说的是外部的局部变量。

0
2
bennyhuo
10:34 ppt左边的 object 不就是个例子么
2021-06-03
共2条回复

大厂资深面试官 带你破解Android高级面试

改变视野和思维 深度与广度兼备的 Android 进阶面试指导课程

1636 学习 · 222 问题

查看课程