在基类中编写一个方法实现,需要在子类中重写?

fra*_*lic 4 java oop inheritance overriding

在Java ...

我正在创建一个包含方法doAction()的类Foo.我的要求:

  1. doAction()必须在Foo中有一个默认实现(即函数体).
  2. Foo的所有子类都必须覆盖doAction(),这意味着如果子类不提供新的实现,则会遇到编译器错误.
  3. 我需要能够实例化Foo.

abstract会工作,除了它不允许我为doAction()指定一个函数体.

Mat*_*all 5

编辑

同时满足所有要求,故事结束是不可能的.你必须放弃至少一个条件,并且可能会考虑采用一种完全不同的方法来解决你想要解决的问题.


使用两种不同的方法.或者:

abstract class Foo {

    // Override this method
    abstract void doActionInSubclass();

    // You can't override a final method
    // And you don't want subclases to override this one
    final void doAction () {
        // do whatever default-y things you want here
        doActionInSubclass();
    }
}
Run Code Online (Sandbox Code Playgroud)

或者只是将"required"方法与要强制子类覆盖的方法完全分开:

abstract class Foo {
    abstract void mustOverrideThisInConcreteSubclasses();

    final void doAction() {
        // default-y things here
    }
}
Run Code Online (Sandbox Code Playgroud)