我有两个关于在对象实例化左侧使用抽象类的问题。
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 可以做的事情,而不关心它是 CrapCar
、NiceCar
还是 SuperNiceCar
Car car = new MyNiceCar();
car.honk(); //meep!
car = new SuperNiceCar();
car.honk(); //beep beep!
但是,你不能反过来。
SuperNiceCar
可能支持 UseTurbo()
,但 MyNiceCar
不支持。
但您不在乎,您只是想让汽车鸣喇叭,所以您将其转换为 Car
,因为您知道所有 Car
都会鸣喇叭。
关于c# - C#中对象实例化左侧的抽象类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52493785/