要求覆盖非抽象类的特定方法

bra*_*n56 15 java methods inheritance

是否可以定义类似的类

public class MyClass
{
    public void methodA(){} // Inherit
    public void methodB(){} // Inherit
    public void methodC(){} // Require override
}
Run Code Online (Sandbox Code Playgroud)

然后让所有从MyClass扩展的类被要求覆盖methodC()但只是简单地继承methodA()methodB()

如果有可能,那怎么做呢?如果不可能,您能否提出替代解决方案以获得类似的结果?

编辑:

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

EJK*_*EJK 14

您必须使您的基类抽象化.

public abstract class MyClass
{
    public void methodA(){} // Inherit
    public void methodB(){} // Inherit
    public abstract void methodC(); // Require override
}
Run Code Online (Sandbox Code Playgroud)

  • 是的,在问题中,您说"如果不可能,您可以提出替代解决方案"吗? (6认同)
  • 在问题中指定该类必须是非抽象的。 (2认同)
  • 好的,我现在明白你的意思了.只是没有清楚地提供答案.我以为你是另一个不能很好地阅读这个问题的人.对不起,我撤回了我的downvote. (2认同)

Thi*_*ilo 9

您不能要求覆盖非抽象方法.

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

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

 protected abstract void methodC1();

 protected abstract void methodC2();
Run Code Online (Sandbox Code Playgroud)

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