(Disclaimer: I've never used "super" as a generic wildcard qualifier, so take this with a grain of salt...)
For (A), actually you can't add Shape and its derivatives, you can only add Shape and its ancestors. I think maybe what you want is
List extends Shape> shapeSuper = new ArrayList();
Specifying "extends" means Shape and anything derived from Shape. Specifying "super" means Shape and anything Shape descended from.
Not sure about (B), unless Object isn't implicit. What happens if you explicitly declare Shape as public class Shape extends Object
?