【发布时间】:2019-05-01 02:47:42
【问题描述】:
在一次采访中被问到为什么我们需要重写基类的方法。 当我们想在派生类中有不同的实现时,我试图回答。 但随后他说,“为什么我们不创建一个具有不同名称和不同实现的新方法,而不是覆盖基类方法?”,无论如何我们不会重用基类方法,因为实现会有所不同,然后只需创建一个新方法而不是覆盖。
我不知道该回答什么。谁能解释一下。
public class BaseClass
{
virtual void Foo(){}
}
public class DerivedClass: BaseClass
{
override void Foo(){}
}
通常我们会像上面那样实现覆盖。 他说的是为什么我们需要覆盖的概念,我们可以像下面那样做
public class BaseClass
{
void Foo(){}
}
public class DerivedClass: BaseClass
{
void Foo1(){}
}
我试图解释他的问题看起来很奇怪,但就像它是基类的方法一样,我们只是在派生类中重新定义它。这样我们的代码也将是干净的。但看起来他并不满意。
【问题讨论】:
-
考虑:
Animal a = new Dog(); Animal b = new Cat(); a.Speak(); b.Speak();- 它与Dog a = new Dog(); Cat a = new Cat(); a.Speak(); b.Speak();有何不同? -
您要更改“基本”功能还是实现新功能?重写方法回到多态性的基础,然后您可以将“新”类的实例传递给需要“旧”实例的方法,它们将能够与它提供的新功能进行交互
-
我强烈怀疑
Foo1应该是Foo以显示 shadowing 与虚拟方法...到目前为止,这篇文章太宽泛了 - 希望它有所涵盖我选择了 3 个重复项。