【问题标题】:How to force a method to be overridden in java?如何强制在java中重写方法?
【发布时间】:2011-05-11 09:03:49
【问题描述】:

我必须创建许多非常相似的类,它们之间只有一种方法不同。所以我认为创建抽象类将是实现这一目标的好方法。但是我想要覆盖的方法(比如方法 foo())没有默认行为。我不想保留任何默认实现,强制所有扩展类实现此方法。我该怎么做?

【问题讨论】:

  • 听起来像是模板方法模式en.wikipedia.org/wiki/Template_method_pattern的实现@
  • 对于您希望所有子类调用其父类的情况,这是一个很好的问题。到目前为止的答案似乎没有考虑到这种情况。示例:确保需要在每个类中重写方法并调用父类:@override protected void importantMethod(){ super.importantMethod(); ... }
  • 我正在寻找@will 发布并找到stackoverflow.com/questions/30046748/…的评论的答案@

标签: java


【解决方案1】:

你的基类需要一个abstract方法:

public abstract class BaseClass {
    public abstract void foo();
}

这样,您无需指定默认行为并且强制从BaseClass 继承的非抽象类指定foo 的实现。

【讨论】:

  • 你的基类BaseClass必须是抽象的。
  • 啊对!我误以为抽象类不能有非抽象方法。谢谢!
【解决方案2】:

只需将 foo() 定义为基类中的抽象方法:

public abstract class Bar {
   abstract void foo();
}

更多信息请参见The Java™ Tutorials (Interfaces and Inheritance)

【讨论】:

    【解决方案3】:

    只需将方法抽象化即可。

    这将强制所有子类实现它,即使它是在抽象类的超类中实现的。

    public abstract void foo();
    

    【讨论】:

    • 感谢提及超类场景
    【解决方案4】:

    如果你有一个抽象类,那么就创建你的方法(比如foo 抽象类)

    public abstract void foo();
    

    那么所有子类都必须覆盖foo

    【讨论】:

      【解决方案5】:

      将此方法设为abstract

      【讨论】:

        猜你喜欢
        • 2017-06-07
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-02-22
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多