Java:从匿名类中获取超类

时间:2016-06-13 09:37:27

标签: java superclass anonymous-class

在Java中,我在A类中使用了一个匿名类,它扩展了B.如何从这个匿名类访问B?我不能使用关键字super,因为这意味着匿名类的超类,而不是超级类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");
    }
}

3 个答案:

答案 0 :(得分:3)

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

答案 1 :(得分:1)

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

B.this.foo()

或者,在您的情况下,如您所希望的超类,请使用

B.super.foo()

Java语言规范的相关部分:

答案 2 :(得分:1)

请致电休闲:

B.super.foo();

此更改后B类如下所示:

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");
    }
}