2016-06-13 107 views
1

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

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

我怀疑你能做到这一点,考虑到类只有*引用*到'B' ... –

回答

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

run,你可以当我改变了,然后就跑B.bar()我得到Good改变foo()B.super.foo();

1

在这种情况下,你需要有资格this捕捉外部类,B

B.this.foo() 

或者,在你的情况下,只要你想超类,使用

B.super.foo() 

相关Java的部分语言规格:

+1

执行“Bad”方法。 –

+0

啊,错过了。固定 –