user358099 user358099 - 4 months ago 9
Java Question

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

Why default constructor is required(explicitly) in a parent class if it has an argumented constructor

class A {
A(int i){
}
}

class B extends A {
}

class Main {
public static void main(String a[]){
B b_obj = new B();
}
}


This will be an error.

Answer

(Like Michael, I assume that you meant to make B extend A.)

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 two 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.
Comments