There are two aspects at work here:
-
If you do specify a constructor explicitly (as in
A
) the Java compiler will not create a parameterless constructor for you. -
If you don’t specify a constructor explicitly (as in
B
) the Java compiler will create a parameterless constructor for you like this:B() { super(); }
(The accessibility depends on the accessibility of the class itself.)
That’s trying to call the superclass parameterless constructor – so it has to exist. You have three options:
- Provide a parameterless constructor explicitly in
A
- Provide a parameterless constructor explicitly in
B
which explicitly calls the base class constructor with an appropriateint
argument. - Provide a parameterized constructor in
B
which calls the base class constructor