强制重写非抽象方法

Force non-abstract method to be overridden

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

是的,通过重新设计以使用 template method pattern 并包含一个抽象方法:

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();
}

基本上如果你想强制子类重写一个方法,它确实必须是抽象的——但这不一定是其他代码调用的方法...

在 Java 中无法执行此操作。但是,您可以再声明一个抽象方法并调用它。像这样:

public final String foo() {
    String intermediate = ... // calculate intermediate result;
    return calculateFinalResult(intermediate);
}

protected abstract String calculateFinalResult(String intermediate);

这样你将被迫覆盖calculateFinalResult。不需要调用 super 实例。此外,子类将无法重新定义您的 foo(),因为它被声明为 final

是这样的吗?

public abstract class MyBean { 

    public final String foo(){
        String preFinalResult = [...];
        return doFinalResult(preFinalResult)
    }

    protected abstract String doFinalResult(String preFinal);
}