Force non abstract method to be overridden

I have a method String foo() in an abstract class which already does a few precomputations but can't deliver the final result the method is supposed to return. So what I want is that each non-abstract class inheriting from my abstract class has to implement foo in a way that first super() is called and then the result is computed. Is there a way to force this in java?

Jon Skeet
people
quotationmark

Yes, by redesigning to use the template method pattern and including an abstract method:

public abstract class AbstractSuper {
    public final String foo() {
        // Maybe do something before calling bar...
        String initialResult = bar();
        // Do something common, e.g. validation
        return initialResult;
    }

    protected abstract String bar();
}

Basically if you want to force subclasses to override a method, it does have to be abstract - but that doesn't have to be the method that is called by other code...

people

See more on this question at Stackoverflow