我正在阅读有关Java中数组协变性不好的原因(为什么数组是协变的,而泛型是不变的?)。如果Dog
是Animal
的子类型,则Dog[]
是Animal[]
的子类型。这是一个问题,因为可以做出以下事情:
Animal[] animals = new Dog[1];
animals[0] = new Cat();
这与泛型不同,泛型被实现得“正确”。
List<Dog>
不是 List<Animal>
的子类型。我试图理解为什么这是不好的,并刚刚了解了 LSP。它是否以任何方式违反了 LSP?似乎没有明显的违规行为。