Why is a method of superinterface called through Interface.super?

  • A+

When you extend a class in Java you can refer to base class' members through the super reference. However when you have a class A, that implements and interface B, you can only refer to B's methods in this way B.super.method(). Why does the super keyword in the second case have to be prefixed with B.?


interface Runner {     default void run() {         System.out.println("default Runner::run");     } }  static class RunnerImpl implements Runner {     public void run() {         Runner.super.run(); // doesn't work without "Runner."     } } 


Because interfaces allow multiple inheritance, which can result in ambiguity for identical methods:

interface Runner1 {     default void run() {         System.out.println("default Runner1::run");     } }  interface Runner2 {     default void run() {         System.out.println("default Runner2::run");     } }  static class RunnerImpl implements Runner1, Runner2 {     public void run() {         super.run(); // which one???     } } 


:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: