强制重写非抽象方法
我在一个抽象类中有一个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); }