super
Keyword in java is used to refer the object of the immediate superclass, and it is related to inheritance in java.
Let’s say you have an instance variable or method of same name in subclass
and superclass
.
How will JVM know which one are you referring to; superclass or subclass?
That’s where you can use super
keyword to refer superclass’s variables, methods or constructor.
Let’s understand this with the help of examples.
super
keyword in java can be used at three-levels.
Table of Contents
- Usage of super at variable level
- Usage of super at Constructor level
- Usage of super keyword at method level
- How to Get Variable From Another Class in Java
- Increment for Loop by 2 in Java
- Return ArrayList in Java
- Check if Object Is Null in Java
- How to Print Multiple Variables in Java
- What is == in java
- Multiple classes in one file in Java
- How to break out of nested loops in Java
- public static void main(String[] args) – Java main method
- Top 20 Java Projects for Beginners
Usage of super at variable level
We can refer to variable of super class using: super.variableName
Let’s see this with the help of example.
- Person class has
name
variable. - Employee class also has same
name
variable.
You can use super.name
to refer to Person’s class name variable, there is no other way to access name variable in subclass.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 |
package org.arpit.java2blog; public class Person { String name; public Person() { System.out.println("Calling Person constructor"); name = "Default"; } } class Employee extends Person { String name; int age; public Employee() { System.out.println("Calling Employee class constructor"); this.name = "Martin"; } public void workOnAssignment() { // Working on assignment } public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } public void printName() { System.out.println("Printing default name from person class : " + super.name); } public static void main(String args[]) { Employee e1 = new Employee(); e1.printName(); } } |
When you run above program, you will get below output:
Calling Employee class constructor
Printing default name from person class : Default
As you can see, we have used super.name
to print name
variable from the Person class
in Employee class’s printName()
method.
Usage of super at Constructor level
super
keyword can be used to call the constructor of immediate parent class.
💡 Important point
Please note that
super
should be first statement in child class constructor.
Let’s see with the help of example:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 |
package org.arpit.java2blog; public class Person { String name; public Person(String name) { this.name=name; System.out.println("Calling Person Parameterized constructor"); } } class Employee extends Person{ int age; public Employee(String name) { super(name); System.out.println("Calling Employee class constructor"); } public void workOnAssignment() { // Working on assignment } public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } public static void main(String args[]) { Employee e1=new Employee("John"); System.out.println("Employee's name:"+e1.getName()); } } |
When you run above program, you will get below output:
Calling Employee class constructor
Employee’s name:John
As you can see we have used super
keyword to call Person constructor from employee class.
💡Did you know?
When you explicitly call parameterized constructor with
super(paramerters)
, then complier won’t call no argument constructor of Parent class.
Usage of super keyword at method level
super
keyword can be used to call method of Parent class. It can be used to specifically call method of parent class in case of method overriding.
Let’s see with the help of example:
We have printName()
method in Person
and Employee
class and we will super.printName()
to call Person’s printName()
method.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 |
package org.arpit.java2blog; public class Person { String name; public Person() { System.out.println("Calling Person constructor"); name="Default"; } public void printName() { System.out.println("Printing default name from person class : "+this.name); } } class Employee extends Person{ String name; int age; public Employee() { System.out.println("Calling Employee class constructor"); this.name="Martin"; } public void workOnAssignment() { // Working on assignment } public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } public void printName() { super.printName(); System.out.println("Printing name from Employee class : "+this.name); } public static void main(String args[]) { Employee e1=new Employee(); e1.printName(); } } |
When you run above program, you will get below output:
Calling Employee class constructor
Printing default name from person class : Default
Printing name from Employee class : Martin
As you can see, we have called Person class method from Employee class using super keyword.
What if subclass doesn’t have same method name as superclass?
You don’t need to use super
keyword in case subclass
doesn’t have the same method name as superclass
.
Let’s see with the help of example.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 |
package org.arpit.java2blog; public class Person { String name; public Person() { System.out.println("Calling Person constructor"); name="Default"; } public void printNameSuperClass() { System.out.println("Printing default name from person class : "+this.name); } } class Employee extends Person{ String name; int age; public Employee() { System.out.println("Calling Employee class constructor"); this.name="Martin"; } public void workOnAssignment() { // Working on assignment } public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } public void printName() { printNameSuperClass(); System.out.println("Printing name from Employee class : "+this.name); } public static void main(String args[]) { Employee e1=new Employee(); e1.printName(); } } |
Output:
Calling Employee class constructor
Printing default name from person class : Default
Printing name from Employee class : Martin
As you can see, we did not use super
with printNameSuperClass()
, and it executed successfully.
That’s all about super keyword in java