c#里 基类数组为什么能存放子类对象呢

如图 c#里 基类数组为什么能存放子类对象呢

img

在网上搜不到这个问题的回答

##################################################################################

没学过里氏替换原则?还是被忽略了?
里氏替换原则(Liskov Substitution Principle LSP)面向对象设计的基本原则之一。
里氏替换原则中说,任何基类可以出现的地方,子类一定可以出现。
LSP是继承复用的基石,只有当衍生类可以替换掉基类,软件单位的功能不受到影响时,
基类才能真正被复用,而衍生类也能够在基类的基础上增加新的行为。

理所应当啊

哺乳动物[]={猫科,犬科} 符合逻辑

猫科[]={大黄狗} 不符合逻辑

设计语法的当然要在技术可以实现的前提下,不违反逻辑,并且尽量贴合人类逻辑。