I often encounter situations like:
List<Fooable> fooList;
vs
List<? extends Fooable> fooList;
What is the difference between these two? Or is there a name for this / pre-existing link where this difference is described? I can't Google this concept because I don't know what it's called or how else you'd describe this.
Does it matter if Fooable is an interface? A concrete class? An abstract class? Does this only apply to classes that extend and/or implement something?