Search code examples
javaoopconstructorconstructor-overloading

Don't create supperclass instance in contructor of subclass, but fully legal


I read in scjp guide as following

In fact, you can't make a new object without invoking not just the constructor of the object's actual class type, but also the constructor of each of its superclasses!

For example

public class Person{

}

public class Employee extends Person{
   public Employee(){
}
}

I don't create a Person instance but it is legal.

Please explain for me, thank for your help.


Solution

  • Whenever you instantiate a subclass, it'll call your superclass' constructor first.

    You can find more about this here: JSL §8.8.7

    Person.java

    public class Person {
        public Person() {
            System.out.println("Super class constructor called");
        }
    }
    

    Employee.java

    public class Employee extends Person {
        public Employee() {
            System.out.println("Sub class constructor called");
        }
    }
    

    If you then instantiate your Employee:

    Employee e = new Employee();
    

    Output:

    Super class constructor called

    Sub class constructor called