Я читал, почему ковариантность массивов в Java плохая (Почему массивы ковариантны, но дженерики инвариантны?). Если Dog
является подтипом Animal
, то Dog[]
является подтипом Animal[]
. Это проблема, потому что такие вещи можно сделать:
Animal[] animals = new Dog[1];
animals[0] = new Cat();
Это отличается от дженериков, которые были реализованы «правильно». List<Dog>
не является подтипом List<Animal>
Я пытался понять суть того, почему это плохо, и только что прочитал о LSP. Это как-то нарушало LSP? Явного нарушения вроде бы нет.