I hope this code explains the problem:
class Foo {
void a() { / *stuff */ }
}
class Bar extends Foo {
void a() { throw new Exception(\"This is not a
Bar.super.a()
appears to work.
Per JLS section 15.12
ClassName . super . NonWildTypeArguments_opt Identifier ( ArgumentList_opt )
is a valid MethodInvocation
You can call any method from the outer class with Outer.this.method()
.
But methods are resolved at runtime, so if you have overridden it in your subclass, only the subclass method (Bar.a()
) can access the original (by calling super.a()
).
As you probably discovered, you can't write Bar.this.super.a()
-- but even if you could, it would still give you Bar.a()
, not Foo.a()
.