要求重写非抽象类的特定方法

2022-09-03 04:58:54

是否可以将类定义为

public class MyClass
{
    public void methodA(){} // Inherit
    public void methodB(){} // Inherit
    public void methodC(){} // Require override
}

然后让所有从 MyClass 扩展的类都需要重写,但只是简单地继承和 ?methodC()methodA()methodB()

如果可能的话,如何做到这一点?如果不可能,您能提出一个替代解决方案来实现类似的结果吗?

编辑:

我需要一个非抽象类,因为我也希望能够实例化这个类。


答案 1

您必须使基类抽象化。

public abstract class MyClass
{
    public void methodA(){} // Inherit
    public void methodB(){} // Inherit
    public abstract void methodC(); // Require override
}

答案 2

不能要求重写非抽象方法。

也许你可以做一些类似于模板方法模式的事情:

 public final void methodC() { methodC1(); someMoreLogic(); methodC2();}

 protected abstract void methodC1();

 protected abstract void methodC2();

这里的方法C封装了一个固定的算法,该算法调用必须由子类提供的片段。


推荐