如果一种编程语言不支持方法覆盖,那么程序员可能会面临哪些不便?

If a programming language does not support method overriding then what inconveniences the programmer might face?

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

这是 Java

中的示例
public class Mammal {
    public final int getNumberOfLegs() {
        return 4;
    }
}

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

这里我把Mammal的方法getNumberOfLegs()声明为final,也就是说不允许重写child中的方法class.

  • 当我尝试在 child class 中覆盖它时,出现编译错误。
  • 如果我需要覆盖它(如本例中人们的腿数异常多),那我就有大问题了。

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

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

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

    • 这减少了您作为程序员的选择,并且
    • 它还会导致 parent classes 对当前和(可能的)未来有太多了解 child classes.