Table of Contents (Click any Topic to view first)
	- Understanding the Super Keyword in Java
 
	- Using super to Refer to Parent Class Instance Variable
 
	- Using super to Invoke Parent Class Method
 
	- Using super to Invoke Parent Class Constructor
 
	- Real Use of super Keyword
 
The super keyword in Java is a reference variable used to refer to the immediate parent class object. It is primarily used in inheritance to access members of the parent class from the child class. The super keyword provides three main functionalities:
	- Referencing the parent class's instance variable.
 
	- Invoking the parent class's method.
 
	- Invoking the parent class's constructor.
 
When parent and child classes have a common field, the super keyword can be used to access the parent class's field.
Example:
class Animal {  
    String color = "white";  
}
 
class Dog extends Animal {  
    String color = "black";  
    void printColor() {  
        System.out.println(color);         // prints color of Dog class  
        System.out.println(super.color);   // prints color of Animal class  
    }  
}
 
class TestSuper1 {  
    public static void main(String args[]) {  
        Dog d = new Dog();  
        d.printColor();  
    }  
}
Output:
black
white
In this example, the color field is defined in both the Animal and Dog classes. Using super.color in the Dog class's printColor method accesses the color field of the Animal class.
The super keyword can also be used to call the parent class's method from the child class, which is useful when the method is overridden.
Example:
class Animal {  
    void eat() { 
        System.out.println("eating..."); 
    }  
}
 
class Dog extends Animal {  
    void eat() { 
        System.out.println("eating bread..."); 
    }  
    void bark() { 
        System.out.println("barking..."); 
    }  
    void work() {  
        super.eat();  
        bark();  
    }  
}
 
class TestSuper2 {  
    public static void main(String args[]) {  
        Dog d = new Dog();  
        d.work();  
    }  
}
Output:
eating...
barking...
In this example, the eat method is overridden in the Dog class. Using super.eat() calls the eat method of the Animal class.
The super keyword can also be used to invoke the parent class's constructor, which is necessary when you want to initialize the parent class's properties from the child class.
Example:
class Animal {  
    Animal() { 
        System.out.println("animal is created"); 
    }  
}
 
class Dog extends Animal {  
    Dog() {  
        super();  
        System.out.println("dog is created");  
    }  
}
 
class TestSuper3 {  
    public static void main(String args[]) {  
        Dog d = new Dog();  
    }  
}
Output:
animal is created
dog is created
In this example, the super() call in the Dog class's constructor invokes the Animal class's constructor.
The super keyword is often used to initialize properties inherited from a parent class.
Example:
class Person {  
    int id;  
    String name;  
    Person(int id, String name) {  
        this.id = id;  
        this.name = name;  
    }  
}
 
class Emp extends Person {  
    float salary;  
    Emp(int id, String name, float salary) {  
        super(id, name);  // reusing parent constructor  
        this.salary = salary;  
    }  
    void display() { 
        System.out.println(id + " " + name + " " + salary); 
    }  
}
 
class TestSuper5 {  
    public static void main(String[] args) {  
        Emp e1 = new Emp(1, "ankit", 45000f);  
        e1.display();  
    }  
}
Output:
1 ankit 45000
In this example, the Emp class reuses the Person class's constructor using super(id, name) to initialize the id and name fields, while Emp's constructor initializes the salary field.
Summary
The super keyword in Java is a powerful tool for managing inheritance, allowing for:
	- Accessing parent class fields and methods.
 
	- Invoking parent class constructors to initialize inherited properties. By using 
super, you can create clear and maintainable code that leverages the full power of inheritance. 

