предполагает, что класс Dog расширяет класс Animal: почему этот полиморфный оператор не разрешен:
List<Animal> myList = new ArrayList<Dog>();
Однако он разрешен с простыми массивами:
Animal[] x=new Dog[3];