Search code examples
javasuperclassanonymous-class

Java: Get super class from an anonymous class


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

Solution

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