Taken from https://stackoverflow.com/a/19231762/1498827
public class Test {
public class A {}
public class B extends A {}
public class C extends B {}
public void testContraVariance(List<? super B> myBlist) {
B b = new B();
C c = new C();
myBlist.add(b);
myBlist.add(c);
A a = myBlist.get(0); // does not compile
}
}
If myBlist accepts a super type of B ,which means B or up, then why can you also add a child to it as in myBlist.add(c)
?