In Java, I use an anonymous class inside a class A which extends B. How can I access to B from this anonymous class? I can't use the keyword super
, because this means super class of the anonymous class, not super class of 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");
}
}
Please call as fallows:
B.super.foo();
After this change B
class looks as follows:
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");
}
}