java - 在基类中编写一个需要在子类中覆盖的方法实现?

标签 java oop inheritance overriding

在 Java 中...

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

  1. doAction() 必须在 Foo 中有默认实现(即函数体)。
  2. Foo 的所有子类都必须覆盖 doAction(),这意味着如果子类不提供新的实现,它们将出现编译错误。
  3. 我需要能够实例化 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/

相关文章:

oop - Golang 在具有私有(private)访问权限的结构中嵌入接口(interface)

java - 如何处理接口(interface)子类的变化?

javascript - util.inherits 如何影响原型(prototype)链?

java - 如何压缩 float 据?

java - 如何在 Java 中获取多个正则表达式匹配项?

c++ - 是否可以继承接口(interface)的实现

OOP、函数式编程、过程式编程

java - 从子类获取数据: Java

java jface按下return/enter时触发事件

java - 创建随机字符串