在 Java 中...
我正在创建一个包含方法 doAction() 的 Foo 类。我的要求:
- doAction() 必须在 Foo 中有默认实现(即函数体)。
- Foo 的所有子类都必须覆盖 doAction(),这意味着如果子类不提供新的实现,它们将出现编译错误。
- 我需要能够实例化 Foo。
abstract 可以工作,只是它不允许我为 doAction() 指定一个函数体。
最佳答案
编辑
不可能同时满足所有要求,故事结束。您必须放弃至少一个条件,并可能考虑一种完全不同的方法来解决您要解决的问题。
使用两种不同的方法。要么:
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();
}
}
或者只是将“必需”方法与您想要强制子类覆盖的方法完全分开:
abstract class Foo {
abstract void mustOverrideThisInConcreteSubclasses();
final void doAction() {
// default-y things here
}
}
关于java - 在基类中编写一个需要在子类中覆盖的方法实现?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8114477/