class NaturalNumber {
private int i;
public NaturalNumber(int i) {
this.i = i;
}
// ...
}
class EvenNumber extends NaturalNumber {
public EvenNumber(int i) {
super(i);
}
// ...
}
Wytłumaczy mi ktoś, czemu w poniższych wywołaniach metod generycznych jedne rzeczy działają, a inne nie?
Najbardziej ciekawi mnie przypadek oznaczony w komentarzu przez "ok" (i przeciwny, "błąd")
List<? extends NaturalNumber> ln = new ArrayList<>();
ln.add(new NaturalNumber(5)); //błąd
ln.add(new EvenNumber(5)); //też błąd, ale tutaj mniej dziwi... a powyżej bardziej
List<? super EvenNumber> le = new ArrayList<>();
le.add(new EvenNumber(5)); //ok
le.add(new NaturalNumber(5)); //błędzik