A call to super() is the first statement inserted by default in all the constructors of all the classes. A class which does not have a super class, actually has a super class called Object. A call to super() means calling the default constructor of the super class. This is necessary because before initializing a class the super class should be initialized. A user can also call a parametric constructor from a constructor eg: super(1). Note here super(1) should be the first statement in the constructor.
The this() call is a call to a constructor of the same class. This also should be the first statement in the constructor. If this statement occurs in a constructor then the call to super() is omitted.
Below examples explains their working.
public class Animal { public Animal(){ System.out.println("Animal constructur called"); } }
public class Dog extends Animal{ public Dog(int i){ this(); System.out.println("Dog constructur called"); } public Dog(){ System.out.println("Dog deault constructur called"); } }
public class Test { public static void main(String[] args) { Dog dog = new Dog(1); } }
Animal constructur called Dog deault constructur called Dog constructur called
public class Animal { public Animal(int i){ System.out.println("Animal constructur called"); } }
public class Dog extends Animal{ public Dog(int i){ this(); System.out.println("Dog constructur called"); } public Dog(){ super(1); System.out.println("Dog deault constructur called"); } }