Java Super Keyword Example
In this post, we feature a comprehensive article about the Java Super Keyword.
1. Introduction
super
keyword is a reference variable that is used to refer to the object of the immediate parent class.
To understand what is immediate parent, consider an example where Class B extends A
and class C extends B
, in this case, class A
is immidate parent for class B
and class B
is an immediate parent for class C
.
2. Usage of the Java super Keyword
There is multiple usages of the super keyword.
- To call the immediate parent class variables.
- To call the immediate parent class methods.
- To call the immediate parent class constructor.
Let’s see the examples for each usage:
2.1 To call the immediate parent class variables
SuperWithVariables.java
01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 | public class SuperWithVariables { public static void main(String[] args) { Bike bike = new Bike(); bike.printWheels(); } } class Vehicle { int noOfWheels = 4 ; } class Bike extends Vehicle { int noOfWheels = 2 ; public void printWheels() { System.out.println( "Number of wheels in Bike : " + noOfWheels); System.out.println( "Number of wheels in Vehicle : " + super .noOfWheels); } } |
Output
1 2 | Number of wheels in Bike : 2 Number of wheels in Vehicle : 4 |
In this example both Vehicle and Bike have the same name class variable, so when we call noOfWheels
in Bike
class, the variable from Bike
will be called so we need some mechanism to differentiate the variables from a parent class and child class. In order to call the parent class variable we use super
keyword followed by a .
and the variable name in the child class.
2.2 To call the immediate parent class methods
SuperWithMethods.java
01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 | public class SuperWithMethods { public static void main(String[] args) { Apple apple = new Apple(); apple.fruitColor(); } } class Fruit { public void fruitColor() { System.out.println( "The fruit has a color." ); } } class Apple extends Fruit { public void fruitColor() { super .fruitColor(); System.out.println( "Apple is Red." ); } } |
Output
1 2 | The fruit has a color. Apple is Red. |
The above example demonstrate the usage of super keyword for calling parent class method. Here in this example we override the fruitColor()
method of Fruit
class in Apple
class. If we simply call fruitColor()
inside Apple
class, overriden method will be called. In order to use parent class method we use super
keyword followed by a .
and the method name in the child class.
2.3 To call the immediate parent class constructor
SuperWithConstructors.java
01 02 03 04 05 06 07 08 09 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 | public class SuperWithConstructors { public static void main(String[] args) { new Child(); } } class Child extends Parent { public Child() { System.out.println( "Inside Child constructor" ); } } class Parent extends SuperClass { public Parent() { this ( "Hello World" ); System.out.println( "Inside Parent constructor" ); } public Parent(String s) { System.out.println( "Inside Parent parameterized constructor with value : " + s); } } class SuperClass { public SuperClass() { System.out.println( "Inside SuperClass constructor" ); } } |
Output
1 2 3 4 | Inside SuperClass constructor Inside Parent parameterized constructor with value : Hello World Inside Parent constructor Inside Child constructor |
In the above example, we have three classes called SuperClass
which is extended by Parent
, which is further extended by Child
class. When we create an instance of Child
class, the Parent
class no-argument constructor is automatically called. In this example when we create the instance of Child class then constructor call goes all the way to the root class and then its child constructors are called in order.
Note:
- While using the
super()
to call the parent constrcutor, it should be the first statement in the child constructor. - If we dont call
super()
in child class, compiler automatically call no argument constructor of parent class. If there is only parameterized constructor in parent class then compiler is unable to call automatically and explicitly constructor call is required.
3. Download the source code
You can download the full source code of this example here: Java Super Keyword Example