Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

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?

like image 644
principal-ideal-domain Avatar asked May 05 '15 07:05

principal-ideal-domain


1 Answers

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

like image 166
Jon Skeet Avatar answered Oct 15 '22 10:10

Jon Skeet