Is super()
used to call the parent constructor?
Please explain super()
.

- 398,270
- 210
- 566
- 880

- 3,893
- 9
- 33
- 42
-
3Has to be more specific or just read the documentation... – Manu Apr 21 '15 at 15:37
-
In connection with super() call check this answer as well. http://stackoverflow.com/questions/34349164/does-object-creation-of-subclass-create-object-of-superclass-if-yes-is-it-possi/34349213#34349213 – Vishrant Dec 23 '15 at 08:38
18 Answers
super()
calls the parent constructor with no arguments.
It can be used also with arguments. I.e. super(argument1)
and it will call the constructor that accepts 1 parameter of the type of argument1
(if exists).
Also it can be used to call methods from the parent. I.e. super.aMethod()
More info and tutorial here

- 11,395
- 12
- 43
- 62
-
10NOTE: in first case, parent class must have a no argument constructor failing to which will throw compilation error. – KNU Aug 06 '14 at 10:01
-
Nit: The parent/child terminology isn't very good for class hierarchies. (A child *is not* a father.) – aioobe Dec 22 '15 at 14:59
-
-
@aioobe A child (a son or daughter of any age) can be a parent. Works fine for hierarchies (especially when multiple inheritance is not supported) – Vivek Chavda Dec 15 '17 at 21:48
-
@AaronFranke One restriction would be trying to call its static methods without instantiating the calling class - https://stackoverflow.com/questions/14112792/why-can-i-not-use-super-variable-from-a-static-context-even-though-super-re – Vivek Chavda Dec 15 '17 at 21:49
-
2@VivekChavda, sure a child *can* be a parent, just like a student can be a teacher, etc. But I think you understand the difference compared to Animal -> Dog for instance. A Dog is *necessarily* an Animal. Parent/child is typically a *has a* relationship ("A parent *has a* child") while an Animal/dog is an *"is a"* relationship. See http://aioo.be/2016/06/29/a-child-is-not-always-a-parent.html – aioobe Dec 16 '17 at 13:50
-
3@AaronFranke, *"Are there any restrictions on where super can be used?"* -- Yes, `super(...)` may only be used as the first statement in a constructor. – aioobe Dec 16 '17 at 13:56
-
Oh I see what you're saying. Yeah, 'super' and 'sub' definitely seem more precise – Vivek Chavda Dec 19 '17 at 18:05
Some facts:
super()
is used to call the immediate parent.super()
can be used with instance members, i.e., instance variables and instance methods.super()
can be used within a constructor to call the constructor of the parent class.
OK, now let’s practically implement these points of super()
.
Check out the difference between program 1 and 2. Here, program 2 proofs our first statement of super()
in Java.
Program 1
class Base
{
int a = 100;
}
class Sup1 extends Base
{
int a = 200;
void Show()
{
System.out.println(a);
System.out.println(a);
}
public static void main(String[] args)
{
new Sup1().Show();
}
}
Output:
200
200
Now check out program 2 and try to figure out the main difference.
Program 2
class Base
{
int a = 100;
}
class Sup2 extends Base
{
int a = 200;
void Show()
{
System.out.println(super.a);
System.out.println(a);
}
public static void main(String[] args)
{
new Sup2().Show();
}
}
Output:
100
200
In program 1, the output was only of the derived class. It couldn't print the variable of neither the base class nor the parent class. But in program 2, we used super()
with variable a
while printing its output, and instead of printing the value of variable a
of the derived class, it printed the value of variable a
of the base class. So it proves that super()
is used to call the immediate parent.
OK, now check out the difference between program 3 and program 4.
Program 3
class Base
{
int a = 100;
void Show()
{
System.out.println(a);
}
}
class Sup3 extends Base
{
int a = 200;
void Show()
{
System.out.println(a);
}
public static void Main(String[] args)
{
new Sup3().Show();
}
}
Output:
200
Here the output is 200. When we called Show()
, the Show()
function of the derived class was called. But what should we do if we want to call the Show()
function of the parent class? Check out program 4 for the solution.
Program 4
class Base
{
int a = 100;
void Show()
{
System.out.println(a);
}
}
class Sup4 extends Base
{
int a = 200;
void Show()
{
super.Show();
System.out.println(a);
}
public static void Main(String[] args)
{
new Sup4().Show();
}
}
Output:
100
200
Here we are getting two outputs, 100 and 200. When the Show()
function of the derived class is invoked, it first calls the Show()
function of the parent class, because inside the Show()
function of the derived class, we called the Show()
function of the parent class by putting the super
keyword before the function name.

- 9,137
- 11
- 75
- 83

- 5,961
- 4
- 40
- 52
-
4Why didn't you indent your sourcecode examples? Is there a specific reason? – erikbstack Sep 22 '10 at 08:23
-
-
-
but in my derived class i use super() without any argu. then what will happen whether it's automatically calls a default constructor of a base class – Mohan Sep 22 '10 at 09:36
-
2`super()` is not a keyword. It is a constructor invocation. `super` is a keyword, and #1 and #2 only makes sense with that definition. – user207421 Jun 23 '17 at 10:06
Source article: Java: Calling super()
Yes. super(...)
will invoke the constructor of the super-class.
Illustration:
class Animal {
public Animal(String arg) {
System.out.println("Constructing an animal: " + arg);
}
}
class Dog extends Animal {
public Dog() {
super("From Dog constructor");
System.out.println("Constructing a dog.");
}
}
public class Test {
public static void main(String[] a) {
new Dog();
}
}
Prints:
Constructing an animal: From Dog constructor
Constructing a dog.

- 413,195
- 112
- 811
- 826
-
In my base class i overload the constructor with one,two,...arguments in my derived class i use super() without any argu. then what will happen whether it's automatically calls a default constructor of a base class – Mohan Sep 22 '10 at 09:39
-
Yes. If you call `super()` it will invoke the constructor of the super-class that takes no arguments. Similarly, it will invoke the 1-argument constructor if you do `super(arg1)`, and so on. – aioobe Sep 22 '10 at 09:41
-
if there was no constructor without any argu in base class then what happens if derived class calls super(). – Mohan Sep 22 '10 at 12:08
-
1Nothing. It will not compile. If you provide a constructor yourself, the automatic/default/no-argument-constructor will not be generated, thus `super()` will not be a valid call. – aioobe Sep 22 '10 at 12:19
Is super() is used to call the parent constructor?
Yes.
Pls explain about Super().
super()
is a special use of the super
keyword where you call a parameterless parent constructor. In general, the super
keyword can be used to call overridden methods, access hidden fields or invoke a superclass's constructor.
Here's the official tutorial
-
5`super()` is used to call the parent constructor, `super.myMethod()` is used to call an overridden method. – Sean Patrick Floyd Sep 22 '10 at 08:12
-
2@seanizer or any other method of the superclass (including statics) if its in scope. super is just a reference to your base class. – atamanroman Sep 22 '10 at 08:22
-
3I don't think super() is used to call base class methods. You can use super.method() though. – Dheeraj Joshi Sep 22 '10 at 08:34
Calling the no-arguments super constructor is just a waste of screen space and programmer time. The compiler generates exactly the same code, whether you write it or not.
class Explicit() {
Explicit() {
super();
}
}
class Implicit {
Implicit() {
}
}

- 40,703
- 10
- 88
- 121
That is correct. Super is used to call the parent constructor. So suppose you have a code block like so
class A{
int n;
public A(int x){
n = x;
}
}
class B extends A{
int m;
public B(int x, int y){
super(x);
m = y;
}
}
Then you can assign a value to the member variable n.

- 1,916
- 15
- 23
I have seen all the answers. But everyone forgot to mention one very important point:
super() should be called or used in the first line of the constructor.

- 17,953
- 10
- 93
- 108
Just super(); alone will call the default constructor, if it exists of a class's superclass. But you must explicitly write the default constructor yourself. If you don't a Java will generate one for you with no implementations, save super(); , referring to the universal Superclass Object, and you can't call it in a subclass.
public class Alien{
public Alien(){ //Default constructor is written out by user
/** Implementation not shown…**/
}
}
public class WeirdAlien extends Alien{
public WeirdAlien(){
super(); //calls the default constructor in Alien.
}
}

- 313
- 5
- 15
For example, in selenium automation, you have a PageObject which can use its parent's constructor like this:
public class DeveloperSteps extends ScenarioSteps {
public DeveloperSteps(Pages pages) {
super(pages);
}........

- 11
- 3
I would like to share with codes whatever I understood.
The super keyword in java is a reference variable that is used to refer parent class objects. It is majorly used in the following contexts:-
1. Use of super with variables:
class Vehicle
{
int maxSpeed = 120;
}
/* sub class Car extending vehicle */
class Car extends Vehicle
{
int maxSpeed = 180;
void display()
{
/* print maxSpeed of base class (vehicle) */
System.out.println("Maximum Speed: " + super.maxSpeed);
}
}
/* Driver program to test */
class Test
{
public static void main(String[] args)
{
Car small = new Car();
small.display();
}
}
Output:-
Maximum Speed: 120
- Use of super with methods:
/* Base class Person */
class Person
{
void message()
{
System.out.println("This is person class");
}
}
/* Subclass Student */
class Student extends Person
{
void message()
{
System.out.println("This is student class");
}
// Note that display() is only in Student class
void display()
{
// will invoke or call current class message() method
message();
// will invoke or call parent class message() method
super.message();
}
}
/* Driver program to test */
class Test
{
public static void main(String args[])
{
Student s = new Student();
// calling display() of Student
s.display();
}
}
Output:-
This is student class
This is person class
3. Use of super with constructors:
class Person
{
Person()
{
System.out.println("Person class Constructor");
}
}
/* subclass Student extending the Person class */
class Student extends Person
{
Student()
{
// invoke or call parent class constructor
super();
System.out.println("Student class Constructor");
}
}
/* Driver program to test*/
class Test
{
public static void main(String[] args)
{
Student s = new Student();
}
}
Output:-
Person class Constructor
Student class Constructor

- 188
- 2
- 11
What can we use SUPER for?
Accessing Superclass Members
If your method overrides some of its superclass's methods, you can invoke the overridden method through the use of the keyword super
like super.methodName();
Invoking Superclass Constructors
If a constructor does not explicitly invoke a superclass constructor, the Java compiler automatically inserts a call to the no-argument constructor of the superclass. If the super class does not have a no-argument constructor, you will get a compile-time error.
Look at the code below:
class Creature {
public Creature() {
system.out.println("Creature non argument constructor.");
}
}
class Animal extends Creature {
public Animal (String name) {
System.out.println("Animal one argument constructor");
}
public Animal (Stirng name,int age) {
this(name);
system.out.println("Animal two arguments constructor");
}
}
class Wolf extends Animal {
public Wolf() {
super("tigerwang",33);
system.out.println("Wolf non argument constructor");
}
public static void main(string[] args) {
new Wolf();
}
}
When creating an object,the JVM always first execute the constructor in the class of the top layer in the inheritance tree.And then all the way down the inheritance tree.The reason why this is possible to happen is that the Java compiler automatically inserts a call to the no-argument constructor of the superclass.If there's no non-argument constructor in the superclass and the subclass doesn't explicitly say which of the constructor is to be executed in the superclass,you'll get a compile-time error.
In the above code,if we want to create a Wolf object successfully,the constructor of the class has to be executed.And during that process,the two-argu-constructor in the Animal class is invoked.Simultaneously,it explicitly invokes the one-argu-constructor in the same class and the one-argu-constructor implicitly invokes the non-argu-constructor in the Creature class and the non-argu-constructor again implicitly invokes the empty constructor in the Object class.

- 21
- 1
The super keyword can be used to call the superclass constructor and to refer to a member of the superclass
When you call super() with the right arguments, we actually call the constructor Box, which initializes variables width, height and depth, referred to it by using the values of the corresponding parameters. You only remains to initialize its value added weight. If necessary, you can do now class variables Box as private. Put down in the fields of the Box class private modifier and make sure that you can access them without any problems.
At the superclass can be several overloaded versions constructors, so you can call the method super() with different parameters. The program will perform the constructor that matches the specified arguments.
public class Box {
int width;
int height;
int depth;
Box(int w, int h, int d) {
width = w;
height = h;
depth = d;
}
public static void main(String[] args){
HeavyBox heavy = new HeavyBox(12, 32, 23, 13);
}
}
class HeavyBox extends Box {
int weight;
HeavyBox(int w, int h, int d, int m) {
//call the superclass constructor
super(w, h, d);
weight = m;
}
}

- 1,067
- 4
- 13
- 31
Constructors
In a constructor, you can use it without a dot to call another constructor. super
calls a constructor in the superclass; this
calls a constructor in this class :
public MyClass(int a) {
this(a, 5); // Here, I call another one of this class's constructors.
}
public MyClass(int a, int b) {
super(a, b); // Then, I call one of the superclass's constructors.
}
super
is useful if the superclass needs to initialize itself. this
is useful to allow you to write all the hard initialization code only once in one of the constructors and to call it from all the other, much easier-to-write constructors.
Methods
In any method, you can use it with a dot to call another method. super.method()
calls a method in the superclass; this.method()
calls a method in this class :
public String toString() {
int hp = this.hitpoints(); // Calls the hitpoints method in this class
// for this object.
String name = super.name(); // Calls the name method in the superclass
// for this object.
return "[" + name + ": " + hp + " HP]";
}
super
is useful in a certain scenario: if your class has the same method as your superclass, Java will assume you want the one in your class; super
allows you to ask for the superclass's method instead. this
is useful only as a way to make your code more readable.

- 1,885
- 1
- 15
- 23
super is a keyword. It is used inside a sub-class method definition to call a method defined in the superclass. Private methods of the superclass cannot be called. Only public and protected methods can be called by the super keyword. It is also used by class constructors to invoke constructors of its parent class.
Check here for further explanation.
As stated, inside the default constructor there is an implicit super() called on the first line of the constructor.
This super() automatically calls a chain of constructors starting at the top of the class hierarchy and moves down the hierarchy .
If there were more than two classes in the class hierarchy of the program, the top class default constructor would get called first.
Here is an example of this:
class A {
A() {
System.out.println("Constructor A");
}
}
class B extends A{
public B() {
System.out.println("Constructor B");
}
}
class C extends B{
public C() {
System.out.println("Constructor C");
}
public static void main(String[] args) {
C c1 = new C();
}
}
The above would output:
Constructor A
Constructor B
Constructor C
The super keyword in Java is a reference variable that is used to refer to the immediate parent class object.
Usage of Java super Keyword
super can be used to refer to the immediate parent class instance variable.
super can be used to invoke the immediate parent class method.
super() can be used to invoke immediate parent class constructor.
-
1This answer is not adding anything not provided [by this answer](https://stackoverflow.com/a/3767421/6530134) that was posted over 10 years before yours. – Timothy G. Jun 01 '21 at 20:39
There are a couple of other uses.
Referencing a default method of an inherited interface:
import java.util.Collection;
import java.util.stream.Stream;
public interface SkipFirstCollection<E> extends Collection<E> {
@Override
default Stream<E> stream() {
return Collection.super.stream().skip(1);
}
}
There is also a rarely used case where a qualified super
is used to provide an outer instance to the superclass constructor when instantiating a static subclass:
public class OuterInstance {
public static class ClassA {
final String name;
public ClassA(String name) {
this.name = name;
}
public class ClassB {
public String getAName() {
return ClassA.this.name;
}
}
}
public static class ClassC extends ClassA.ClassB {
public ClassC(ClassA a) {
a.super();
}
}
public static void main(String[] args) {
final ClassA a = new ClassA("jeff");
final ClassC c = new ClassC(a);
System.out.println(c.getAName());
}
}
Then:
$ javac OuterInstance.java && java OuterInstance
jeff

- 4,959
- 1
- 30
- 36