Default interface method for abstract superclass

default-method, java, java-8

Solution

The answer of Jacob G. inspired me to come up with this solution:

interface Z {
     abstract boolean foo();
}

abstract class A implements Z {

}

interface B extends Z {
     default boolean foo() { return doBlah(); }
}

class C extends A implements B {

}

This way all subclasses of class `A` are required to define a method `foo()`, Without requiring every class that implements `B` to re-implement it.

Problem

Lets say I have the following structure: ``` abstract class A { abstract boolean foo(); } interface B { default boolean foo() { return doBlah(); } } class C extends A implements B { //function foo } ``` Java will now complain that class `C` must implement abstract method foo from `A`. I can work around this problem relatively easy by redefining the function in `C` and simply calling `B.super.foo();`. however I do not understand why the default function from interface `B` does not forfill this requirement on its own, and I would like to have a better understanding of the underlying mechanics of java.

Original source