java - 如何强制子类在具有主体的父类(super class)中实现方法

标签 java android overwrite

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 被迫提供方法 YouMustImplement() 的实现,并且通过设计保证调用 doThings() 中的代码而无需记住调用 super.doThings( ). 然后,您可以考虑将 doThings() 设为最终版本,正如 Andy Turner 所建议的那样。

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

相关文章:

java - 保存多 channel 音频文件

java - 使用MVVM和LiveData登录

javascript - 文件写入权限被EPERM阻止-删除然后写入新文件。 Node.js

c - 我的数组仅保存存储在C中的最后一个元素

java - Java中有同步队列吗?

java - 在这种情况下如何避免代码重复?

java - 安卓编辑联系人

java - BaseAdapter.notifyDataSetChanged 不更新其 ListView

java - 我的程序覆盖了它正在写入的文件,但它不应该

java - 使用了错误的 JDBC 驱动程序?