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/