抽象类必须重写抽象方法吗?

4

假设有这个抽象类:

abstract public class MyBase {

    abstract public int GetValue();

    <some concrete methods here>
}

现在我想将其作为另一个抽象类继承,实现GetValue()但添加新的抽象方法:
abstract public class MyBase2 : MyBase {

    abstract public int GetValue2();

    public override int GetValue() {
        // some code here
        return something;
    }

}

我为什么要在MyBase2.GetValue()中指定override关键字呢?MyBase.GetValue()已经被标记为abstract,因此任何继承自MyBase的内容都会自然地覆盖它,是吗?

2个回答

4
为什么我必须在MyBase2.GetValue()中指定override关键字?
这是c++也采用的一种范例。
想法是:通过明确需要使用virtual和abstract关键字中的override,您将确保在进行重写时没有拼写错误。因为如果您看不到这样的拼写错误,虚拟机器上的行为会发生显着变化。
话虽如此;我仍然觉得新添加的方法的new关键字可选,只有在省略时才会产生警告,这是很奇怪的。

1

由于您的MyBase2类也被标记为abstract,因此您应该告诉编译器GetValue()是在这个类中实现的,而不是在继承层次结构中更高的其他类(实现MyBase2)。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接