You are currently viewing Super Keyword in Java

Super Keyword in Java

Introduction

Mastering inheritance in Java is crucial for any serious developer. The super keyword is a fundamental tool that enhances object-oriented programming by allowing subclasses to interact directly with their parent classes. This article provides a comprehensive exploration of the super keyword in Java, including its core roles, usage patterns, and best practices.
As the famous saying goes, “To understand where you are, you must know where you came from”—and in Java, super helps your subclasses remember their roots.

1. What is the super Keyword?

In Java, the super keyword refers to the immediate parent class object. It is primarily used in three contexts: accessing parent class fields, invoking parent class methods, and calling parent constructors. By using super, developers can explicitly resolve ambiguity between superclass and subclass members. As you continue to develop in Java, remembering “super is your bridge to inherited behavior” can help avoid many common pitfalls.


If you are also interested in how to reference the current object, be sure to read our article on the this keyword in Java.

2. Accessing Parent Class Fields

One of the main reasons to use super is to access fields defined in the superclass that are hidden by subclass fields. This is particularly important when the subclass defines a field with the same name as one in the parent class, creating a naming conflict. The super keyword makes your intention crystal clear.

// In SuperKeywordDemo.java

class Parent {
    String name = "ParentName";
}

public class SuperKeywordDemo extends Parent {
    String name = "ChildName";

    public void printNames() {
        System.out.println("Subclass name: " + this.name);   // Outputs ChildName
        System.out.println("Superclass name: " + super.name); // Outputs ParentName
    }
}

Explanation:
In this example, both Parent and SuperKeywordDemo define a name field. Using super.name accesses the Parent‘s field, whereas this.name refers to the subclass’s own field. This pattern helps avoid confusion, especially in large class hierarchies.

3. Invoking Parent Class Methods

When a subclass overrides a method from its parent, you can still access the original implementation by using super. This is useful for extending or combining behaviors rather than fully replacing them.

class Parent {
    void display() {
        System.out.println("Display from Parent");
    }
}

public class SuperKeywordDemo extends Parent {
    @Override
    void display() {
        System.out.println("Display from Child");
    }

    public void callParentDisplay() {
        super.display(); // Calls the parent class version
    }
}

Explanation:
By invoking super.display(), the subclass can utilize the logic of the overridden method in the parent class. This technique is often seen in frameworks and libraries where default behavior must be preserved.
As noted in object-oriented design, “You don’t have to throw away the past to create something new.”

4. Calling Parent Class Constructors

Another powerful use of super is within constructors. It allows a subclass constructor to explicitly call a parent class constructor, which is especially useful when the parent class requires arguments or complex initialization.

class Parent {
    int number;
    Parent(int number) {
        this.number = number;
    }
}

public class SuperKeywordDemo extends Parent {
    String description;

    public SuperKeywordDemo(int number, String description) {
        super(number); // Calls the parent class constructor
        this.description = description;
    }
}

Explanation:
Here, super(number); ensures the parent class is initialized correctly. In Java, if you do not explicitly call a parent constructor, the compiler automatically inserts a call to the no-argument constructor. This makes using super essential when the parent class does not have a default constructor.

5. Best Practices and Common Pitfalls

While super is an essential feature, it should be used judiciously. Overusing it can make code harder to maintain, while underusing it can lead to subtle bugs or confusion.

  • Use super to resolve ambiguity: If a subclass member shadows a parent member, super clarifies intent.
  • Always use super for required constructor calls: Especially when the parent class lacks a no-argument constructor.
  • Avoid calling overridden methods from constructors: This can result in unexpected behavior because subclass fields might not be initialized.

“A wise coder knows when to build on the past, and when to pave a new road.”

For more inheritance tips, consult our Java inheritance guide.

Conclusion

The super keyword is an indispensable part of Java’s inheritance model. By making relationships between subclasses and superclasses explicit, super enables safer, clearer, and more maintainable code. Mastering its use will deepen your understanding of object-oriented programming in Java and help you avoid many common mistakes.

Continue your learning journey by exploring object-oriented fundamentals, and how to use the this keyword in Java.

You can find the complete code of this article on GitHub.

Noel Kamphoa

Experienced software engineer with expertise in Telecom, Payroll, and Banking. Now Senior Software Engineer at Societe Generale Paris.