Java: 从匿名 class 获取超级 class

Java: Get super class from an anonymous class

在 Java 中,我在扩展 B 的 class A 中使用匿名 class。如何从这个匿名 class 访问 B?我不能使用关键字 super,因为这意味着匿名 class 的 super class,而不是 super class 的 A.

public class A {

    void foo() {
        System.out.println("Good");
    }
}

public class B extends A {

    void bar() {
        Runnable r = new Runnable() {

            @Override
            public void run() {
                foo(); // Bad: this call B.foo(), not A.foo()
                // super.foo(); // Bad: "Method foo is undefined for type Object"
            }

        };
        r.run();
    }

    @Override
    void foo() {
        System.out.println("Bad");
    }
}

run 中,您可以将 foo() 更改为 B.super.foo();,然后我更改 运行 B.bar() 我得到 Good

在这种情况下,您需要限定this以捕获外部class、B

B.this.foo()

或者,在您的情况下,如果您想要超级 class,请使用

B.super.foo()

Java 语言规范的相关部分:

休假请来电:

B.super.foo();

此更改后 B class 如下所示:

public class B extends A {

    public static void main(String[] args) {
        new B().bar();
    }

    void bar() {
        Runnable r = new Runnable() {

            @Override
            public void run() {
                B.super.foo(); // this calls A.foo()
            }

        };
        r.run();
    }

    @Override
    void foo() {
        System.out.println("Bad");
    }
}