c# - C#中对象实例化左侧的抽象类

标签 c# polymorphism abstract-class

我有两个关于在对象实例化左侧使用抽象类的问题。

AbstractClass MyClass = new ConcreteClass();

1 - 这叫什么?(当你声明左边的抽象类时。)

例如

Car MyNiceCar = new NiceCar();

我知道这与多态性有关,但我特别想问的是在左侧声明抽象类时如何描述/描述场景。

2 - 为什么要这样做?即你为什么要这样做:

Car MyNiceCar = new NiceCar();

而不是:

NiceCar MyNiceCar = new NiceCar();

?

问题 2 的答案可能是为了让我可以执行以下操作吗?

Car MyNiceCar = new NiceCar();

.
. //do some logic to decide if I can have a nicer car.
.

MyNiceCar = new EvenNicerCar();

最佳答案

1) 您正在创建对派生类的基类引用。
编辑:
BaseClass的其他词:SuperClass,ParentClass
DerivedClass 的其他词:子类、子类 不要问为什么每个都有那么多单词。这有点像 Spaces vs Tabs 类型的东西。

2) 您这样做是为了可以使用您知道所有派生类都将具有的虚拟 函数/属性。您想做 Car 可以做的事情,而不关心它是 CrapCarNiceCar 还是 SuperNiceCar

Car car = new MyNiceCar();
car.honk(); //meep!
car = new SuperNiceCar();
car.honk(); //beep beep!

但是,你不能反过来。

SuperNiceCar 可能支持 UseTurbo(),但 MyNiceCar 不支持。

但您不在乎,您只是想让汽车鸣喇叭,所以您将其转换为 Car,因为您知道所有 Car 都会鸣喇叭。

See also

关于c# - C#中对象实例化左侧的抽象类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52493785/

相关文章:

c# - linq 不区分大小写(没有 toUpper 或 toLower)

c# - 多态性 : How to create dynamic instance of Interface

java - 多个字段中有一个必填字段的Json

java - 摘要关键字的放置

java - 初始化抽象类的ArrayList

c# - 扩展 IQueryable 并解析属性

c# - 如何从 XML 中获取我想要的节点

c# - 如何创建和使用符号服务器?

java - 在 B 继承自 A 的情况下创建了多少个对象?

Java - 扩展抽象类并实现具有相同方法的接口(interface)的类