Search code examples
javajava-8default-method

Default interface method for abstract superclass


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.


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.