强制重写非抽象方法

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

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

 public abstract class AbstractSuper { public final String foo() { // Maybe do something before calling bar... String initialResult = bar(); // Do something common, eg 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); }