The answer is the moment you put a collection with a reference bound(upper-bound), it is now immutable.
Before you assign the collection object to a bounded reference, you should modify it head on.
List<Bird> birds1 = new ArrayList<>();
List<? extends Bird> birds2 = birds1;
If you remove the comment, the code will not compile.