BaseClass obj = new SubClass(); // Subclass : BaseClass
这在OOP中意味着什么?我什么时候想要这样做而不是仅仅创建一个SubClass对象?如果有人可以给我一个真实的例子,我真的会对它进行诠释。
obs:我知道虚拟方法和东西有一些副作用,但我真正感到困惑的是它的概念和用法。
答案 0 :(得分:3)
我能想到的最常见的原因是在一个范围内,可以为该变量分配多种类型的子类:
Vehicle myWheels;
if (iHaveALicense) {
myWheels = new Car();
} else {
myWheels = new Bus();
}
答案 1 :(得分:2)
一个非常简单的例子是考虑一个工厂类。如果一个类依赖某些Factory<T>
,则可以使用继承来注入“具体”版本。消费类并不关心具体版本的 ,只是它实现了一些契约。
“OOP意味着什么?” - 在C#中,这意味着SubClass
继承了BaseClass
的所有内容,并且可以访问BaseClass
内的所有内容,减去私有成员。通过这样做,在需要BaseClass
的任何地方,可以使用SubClass
代替它。在我的示例中,您可以通过公开抽象基类来定义工厂应该做什么。然后,继承类可以自由地实现该行为,而没有任何消费者关心如何完成工作。
(这只是一个例子 - 继承,当没有被滥用时,是一个非常强大的工具。)
答案 2 :(得分:2)
假设您有另一个继承BaseClass的类:
public class NewSubClass : BaseClass
以您显示的方式初始化对象时,您可以这样做:
BaseClass obj = new SubClass();
obj = new NewSubClass();
另一方面是这样的:
SubClass obj = new SubClass();
obj = new NewSubClass();
根本不会编译。
答案 3 :(得分:0)
这将被称为多态性。
假设有一个以baseclass为参数的函数。
void my_function(Animal ani)
{
Console.WriteLine(ani.makeSound());
}
现在,如果在基类中创建虚方法并在派生类中重写它们,然后将从animal派生的任何对象传递给该函数。然后makeSound将根据您传递的派生对象生成声音。
这样你就不必为每一种产生声音的动物制作这个功能。