在一次采访中,有人问为什么我们需要重写基类的方法。 当我们想要在派生类中实现不同的实现时,我试图做出回答。 但是随后他说:“为什么我们不创建一个具有不同名称和实现的新方法,而不是重写基类方法?”无论如何,我们不重用基类方法,因为实现会有所不同,然后创建一个新方法而不是覆盖。
我很困惑该怎么回答。有人可以解释。
public class BaseClass
{
virtual void Foo(){}
}
public class DerivedClass: BaseClass
{
override void Foo(){}
}
通常,我们像上面那样实现覆盖。 他说的就像是为什么我们需要覆盖的概念,我们可以像下面这样
public class BaseClass
{
void Foo(){}
}
public class DerivedClass: BaseClass
{
void Foo1(){}
}
我试图解释他的问题看起来很奇怪,但就像它是基类的方法一样,我们只是在派生类中对其进行了重新定义。这样,我们的代码也将变得干净。但是看起来他并不满意。
答案 0 :(得分:0)
我会检查以下答案: Why does this polymorphic C# code print what it does?
然后尝试在基本上具有代码指针的对象中掌握方法的概念。当您在子类中override
实现时,无论是否使用它或将其转换为超类,该代码都将成为所指向的新代码。
因此,覆盖的主要目的是创建从一个类继承但每个类都有自己的实现的类,然后能够像对待原始超类一样对它们进行处理或操作。这是Liskov原理或SOLID中的“ L”的本质。 What is an example of the Liskov Substitution Principle?