If this were legal, you could do the following:
ArrayList<ArrayList<Integer>> y = new ArrayList<>();
ArrayList<List<Integer>> x = y; // Compiler error! Pretend it's OK, though.
x.add(new LinkedList<>()); // Fine, because a LinkedList<Integer> is a List<Integer>
but then this would fail:
ArrayList<Integer> a = y.get(0); // ClassCastException!
because the first element of y is a LinkedList, not an ArrayList.
You can assign y to x if the type of x is
ArrayList<? extends List<Integer>>`
because you couldn't then add anything (other than literal null) to that list, hence the ClassCastException wouldn't occur.