Saltar al contenido principal
Documentos
Java keywordsMatrices JavaProgramación orientada a objetos en JavaJava File HandlingIntroducción a JavaConceptos básicos del lenguaje Java

super Palabra clave en Java

La palabra clave super en Java se utiliza para referirse al objeto de clase padre inmediato. Se suele utilizar para acceder a los métodos y constructores de la clase padre, lo que permite a una subclase heredar y reutilizar la funcionalidad de su superclase.

Utilización

La palabra clave super puede utilizarse en tres contextos principales:

  1. Para llamar al constructor de la superclase.
  2. Para acceder a un método de la superclase que ha sido sobrescrito en la subclase.
  3. Para acceder a un campo de la superclase cuando está oculto por un campo del mismo nombre en la subclase.

Syntax

super();
super.methodName();
super.fieldName;

Ejemplos

Ejemplo 1: Llamada al constructor de la superclase

class Animal {
    Animal() {
        System.out.println("Animal constructor called");
    }
}

class Dog extends Animal {
    Dog() {
        super(); // Calls the constructor of Animal class
        System.out.println("Dog constructor called");
    }
}

public class TestSuper {
    public static void main(String[] args) {
        Dog d = new Dog(); // Output: Animal constructor called
                          //         Dog constructor called
    }
}

En este ejemplo, la llamada a super() en el constructor de Dog invoca al constructor de la clase Animal.

Ejemplo 2: Acceso al método de la superclase

class Animal {
    void sound() {
        System.out.println("Animal makes a sound");
    }
}

class Dog extends Animal {
    void sound() {
        super.sound(); // Calls the sound() method of Animal class
        System.out.println("Dog barks");
    }
}

public class TestSuper {
    public static void main(String[] args) {
        Dog d = new Dog();
        d.sound(); // Output: Animal makes a sound
                   //         Dog barks
    }
}

Aquí, la llamada super.sound() del método sound() de la clase Dog invoca al método sound() de la clase Animal.

Ejemplo 3: Acceso al campo Superclase

class Animal {
    String color = "white";
}

class Dog extends Animal {
    String color = "black";

    void displayColor() {
        System.out.println("Dog color: " +// Prints the color of Dog class
        System.out.println("Animal color: " + super.// Prints the color of Animal class
    }
}

public class TestSuper {
    public static void main(String[] args) {
        Dog d = new Dog();
        d.displayColor(); // Output: Dog color: black
                          //         Animal color: white
    }
}

En este ejemplo, super.color se utiliza para acceder al campo color de la clase Animal, que está oculto por el campo color de la clase Dog.

Consejos y buenas prácticas

  • Encadenamiento de constructores: Utiliza super() en el constructor de una subclase para asegurarte de que se llama al constructor de la superclase, permitiendo la correcta inicialización del objeto.  
    class Parent {
        Parent() {
            System.out.println("Parent constructor");
        }
    }
    
    class Child extends Parent {
        Child() {
            super(); // Always the first statement in the constructor
            System.out.println("Child constructor");
        }
    }
  • Anulación de métodos: Utiliza super.methodName() para llamar a un método de la superclase cuando se sobrescribe en la subclase. Esto es útil para ampliar o modificar el comportamiento del método heredado.  
    class Parent {
        void display() {
            System.out.println("Parent display");
        }
    }
    
    class Child extends Parent {
        void display() {
            super.display(); // Calls Parent's display method
            System.out.println("Child display");
        }
    }
  • Acceso al campo: Utiliza super.fieldName para acceder a un campo de la superclase cuando esté oculto por un campo del mismo nombre en la subclase. Esto ayuda a evitar ambigüedades y garantiza que se accede al campo correcto.  
    class Parent {
        int number = 10;
    }
    
    class Child extends Parent {
        int number = 20;
    
        void showNumber() {
            System.out.println(super.number); // Accesses Parent's number
        }
    }
  • Legibilidad: Utiliza super juiciosamente para que tu código sea más legible y fácil de mantener. El uso excesivo de super puede dificultar la comprensión del código.
  • Colocación en Constructores: Coloca siempre la llamada a super() como primera sentencia en el constructor de la subclase para evitar errores de compilación.
  • Contextos estáticos: Recuerda que super no puede utilizarse en métodos estáticos ni en contextos estáticos, ya que se refiere a una instancia de una clase.

Aprende Java Essentials

Desarrolla tus conocimientos de Java desde la base y domina los conceptos de programación.
Empieza a aprender gratis