强制重写非抽象方法

pri*_*ain 6 java abstract-class

我String foo()在抽象类中有一个方法,它已经进行了一些预计算,但无法提供该方法应该返回的最终结果.所以我想要的是,从我的抽象类继承的每个非抽象类必须以foo第一个super()被调用的方式实现,然后计算结果.有没有办法在java中强制执行此操作?

Jon*_*eet 16

是的,通过重新设计使用模板方法模式并包含一个抽象方法:

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();
}
Run Code Online (Sandbox Code Playgroud)

基本上,如果你想迫使子类覆盖方法,它也必须是抽象的-但是,这并不一定是由其他代码调用的方法...