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.
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.