constructor of subclass in Java

When creating an Employee you’re creating a Person at the same time. To make sure the Person is properly constructed, the compiler adds an implicit call to super() in the Employee constructor:

 class Employee extends Person {
     Employee(int id) {
         super();          // implicitly added by the compiler.
     }
 }

Since Person does not have a no-argument constructor this fails.

You solve it by either

  • adding an explicit call to super, like this:

     class Employee extends Person {
         Employee(int id) {
             super(id);
         }
     }
    
  • or by adding a no-arg constructor to Person:

    class Person {
        Person() {
        }
    
        Person(int a) {
        }
    }
    

Usually a no-arg constructor is also implicitly added by the compiler. As Binyamin Sharet points out in the comments however, this is only the case if no constructor is specified at all. In your case, you have specified a Person constructor, thus no implicit constructor is created.

Leave a Comment