Given a random class:
public class A { public T t; public A () {} // <-- why is this constructor necessary for B? public A (T t) {
You may use your own constructor in A, but you have to call it explicitly from the B's constructor, e.g.:
A
public B(Integer i) { super(i); ... }
If you don't do that, the compiler will attempt to instantiate A itself, by calling its default constructor.