Difference between "this" and"super" keywords in Java

java, keyword

Solution

Lets consider this situation

class Animal {
  void eat() {
    System.out.println("animal : eat");
  }
}

class Dog extends Animal {
  void eat() {
    System.out.println("dog : eat");
  }
  void anotherEat() {
    super.eat();
  }
}

public class Test {
  public static void main(String[] args) {
    Animal a = new Animal();
    a.eat();
    Dog d = new Dog();
    d.eat();
    d.anotherEat();
  }
}

The output is going to be

animal : eat
dog : eat
animal : eat

The third line is printing "animal:eat" because we are calling `super.eat()`. If we called `this.eat()`, it would have printed as "dog:eat".

Problem

What is the difference between the keywords `this` and `super`? Both are used to access constructors of class right? Can any of you explain?

Original source