You can call any method from an external class using Outer.this.method() .
But methods are allowed at runtime, so if you redefined it in your subclass, only the subclass method ( Bar.a() ) can access the original (by calling super.a() ).
As you probably discovered, you cannot write Bar.this.super.a() - but even if you could, it would still give you Bar.a() , not Foo.a() .
Michael myers
source share