Why default constructor is required in a parent class if it has an argument-ed constructor?

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 appropriate int argument.
  • Provide a parameterized constructor in B which calls the base class constructor

Leave a Comment