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/