我知道为什么不应该这样做。但是有办法向外行解释为什么这是不可能的。您可以向外行轻松解释:Animal animal = new Dog();。狗是一种动物,但是狗的列表不是动物的列表。
Animal animal = new Dog();
假设您创建了“ 狗” 列表。然后,将其声明为 List 并将其交给同事。他 并非没有道理地 相信自己可以在里面放一只 猫 。
然后,他将其还给您,您现在有了“ 狗” 列表,其中有“ 猫 ”。混乱随之而来。
重要的是要注意,由于列表的可变性,存在此限制。在Scala中(例如),您可以声明 Dogs* 列表是 Animals 列表。这是因为Scala列表(默认情况下)是不可变的,因此将 Cat 添加到 Dogs 列表将为您提供 Animals 的 新 列表。 *