I think what you are missing is that when you do in your first example:
List<Fruit> fruitBowl = bunchOfBananas;
You are not making a copy of bunchOfBananas
into a List<Fruit>
. Instead, you are creating a reference to a bunch of bananas, and that reference could be used to add any kind of fruit.
Thus when you do:
fruitBowl.Add(new Apple());
you would not be adding an apple to a list of fruit; you'd be adding an apple to the List<Banana> bunchOfBananas
, which is clearly A Bad Thing.