Важным моментом является понимание того, что первая строка любого конструктора должна вызывать супер-конструктор. Компилятор делает ваш код короче, вставляя super()
под обложки, если вы сами не вызываете супер-конструктор.
Также, если у вас нет каких-либо конструкторов , автоматически будет вставлен пустой конструктор по умолчанию - здесь A()
или B()
.
У вас есть ситуация, когда в вашем B-конструкторе нет super(...)
, поэтому компилятор вставляет сам вызов super()
, но у вас do есть конструктор A с аргументами, так что конструктор A () по умолчанию не вставляется, и вы должны предоставить конструктор A () вручную или вызвать вместо него конструктор A (i). В этом случае я бы предложил иметь
public class B extends A<Integer> {
public B (Integer i) {
super(i);
}
}