Welcome to ShenZhenJia Knowledge Sharing Community for programmer and developer-Open, Learning and Share
menu search
person
Welcome To Ask or Share your Answers For Others

Categories

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?

See Question&Answers more detail:os

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
thumb_up_alt 0 like thumb_down_alt 0 dislike
377 views
Welcome To Ask or Share your Answers For Others

1 Answer

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


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
thumb_up_alt 0 like thumb_down_alt 0 dislike
Welcome to ShenZhenJia Knowledge Sharing Community for programmer and developer-Open, Learning and Share
...