Class Base{
    public void doThings(){
         //some logic that needed by subclass
    }
}

Class A extends Base{
      public void doThings(){
         super.doThings();
         doOtherThings();
    }
}


我想要的是强制A覆盖doThings()方法(否则将出现错误消息)并调用super.doThings();。但是Base中的doThings()不应为抽象的,因为它具有主体。

有什么不错的解决方案吗?我在下面的链接中找到了相同的问题,但是接受的答案无法正确回答。
Force SubClasses to @Override method from SuperClass. Method in SuperClass must have body

最佳答案

如果要确保调用基类的doThings,则应按以下方式设计类:

abstract class Base {
  public void doThings() {
    // do some things here
    ...
    // make sure subclass does some things too
    methodYouMustImplement();
  }

  abstract void methodYouMustImplement();
}

class A extends Base {
  @Override void methodYouMustImplement() {
    // do some other things
  }
}


这样,A被迫提供methodYouMustImplement()的实现,并且通过设计保证了doThings()中的代码被调用而无需记住调用super.doThings()。
然后,您可以按照Andy Turner的建议考虑将doThings()最终化。

关于java - 如何强制子类在具有主体的父类(super class)中实现方法,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/42574055/

10-09 04:20