首页 > 解决方案 > 如果编程语言不支持方法覆盖,那么程序员可能面临哪些不便?

问题描述

理论上,如果需要,子类不能覆盖父类的方法。但它在实际方面有何实际影响?程序员会面临什么问题?

标签: oopoverriding

解决方案


这是Java中的示例

public class Mammal {
    public final int getNumberOfLegs() {
        return 4;
    }
}

public class Human extends Mammal {
    @Override                        <<-- compilation error!
    public int getNumberOfLegs() {
        return 2;
    }
}

这里我将Mammal's 方法声明getNumberOfLegs()final,这意味着不允许在子类中覆盖该方法。

  • 当我尝试在子类中覆盖它时,出现编译错误。
  • 如果我需要覆盖它(就像在这个例子中,人们的腿数不寻常),那么我有一个大问题。

现在想象一下如果 Java 不允许我覆盖子类中的任何方法会发生什么。我将无法在子类中实现具有不同行为的任何方法。

  • 在一些简单的情况下,我将能够解决这个问题。(在这个中,我可以为所有对象添加一个numberOfLegs字段。)Mammal

  • 在其他情况下,在类层次结构中共享公共行为会更加困难。(在我设计的示例中,您可以想象我没有预料到getNumberOfLegs() 可能需要在子类中以不同方式实现。)现在显然您可以通过修改父类的代码而不是在子类中覆盖它来改变行为。然而:

    • 这减少了您作为程序员的选择,并且
    • 它还导致父类对当前和(可能的)未来子类有太多了解。

推荐阅读