Guía de la palabra clave super Java

Introducción

En Java, el palabra clave super es una herramienta poderosa y fundamental que se usa en el contexto de la herencia y el acceso a los miembros de la clase base (superclase). Es un concepto esencial que te permitirá entender cómo interactúan las clases y objetos en Java, especialmente cuando se utilizan en conjunto con la herencia. Esta guía está diseñada para principiantes, por lo que cubriremos todos los aspectos básicos de super de manera sencilla, con ejemplos fáciles de seguir.

¿Qué es super?

La palabra clave super en Java se usa principalmente en dos situaciones:

  1. Acceder a los miembros (métodos o variables) de la superclase: Cuando una clase hereda de otra, puedes usar super para hacer referencia a los miembros de la clase base.
  2. Llamar al constructor de la superclase: Se utiliza para invocar el constructor de la clase base desde el constructor de la clase derivada.

1. Acceso a miembros de la superclase

En Java, cuando una clase hereda de otra, puede acceder a los miembros (métodos y variables) de la clase base. Si un miembro tiene el mismo nombre en la clase base y la clase derivada, el uso de super permite acceder a la versión de la clase base.

Ejemplo 1: Acceder a un método de la superclase

class Animal {
    void hacerSonido() {
        System.out.println("El animal hace un sonido");
    }
}

class Perro extends Animal {
    void hacerSonido() {
        System.out.println("El perro ladra");
    }
    
    void sonidoDeAnimal() {
        super.hacerSonido();  // Llama al método de la superclase
    }
}

public class Main {
    public static void main(String[] args) {
        Perro miPerro = new Perro();
        miPerro.sonidoDeAnimal();  // Imprime: El animal hace un sonido
    }
}

En este ejemplo, la clase Perro sobrescribe el método hacerSonido() de la clase Animal. Sin embargo, al usar super.hacerSonido(), estamos llamando al método de la superclase, es decir, el método hacerSonido() de la clase Animal.

Ejemplo 2: Acceder a una variable de la superclase

class Animal {
    String nombre = "Animal";
}

class Perro extends Animal {
    String nombre = "Perro";
    
    void mostrarNombre() {
        System.out.println("Nombre en la clase Perro: " + nombre);
        System.out.println("Nombre en la clase Animal: " + super.nombre);
    }
}

public class Main {
    public static void main(String[] args) {
        Perro miPerro = new Perro();
        miPerro.mostrarNombre();  
    }
}

En este caso, super.nombre accede a la variable nombre de la superclase Animal, mientras que nombre sin super hace referencia a la variable nombre de la clase Perro.

2. Llamar al constructor de la superclase

Cuando una clase hereda de otra, Java llama automáticamente al constructor de la superclase, pero si necesitas llamar específicamente a un constructor de la clase base, puedes hacerlo usando super(). Esto es útil cuando la clase base tiene un constructor que necesita parámetros.

Ejemplo 3: Llamar a un constructor de la superclase

class Animal {
    String nombre;
    
    Animal(String nombre) {
        this.nombre = nombre;
    }
}

class Perro extends Animal {
    
    Perro(String nombre) {
        super(nombre);  // Llama al constructor de la superclase
    }
    
    void mostrarNombre() {
        System.out.println("El nombre del perro es: " + nombre);
    }
}

public class Main {
    public static void main(String[] args) {
        Perro miPerro = new Perro("Bobby");
        miPerro.mostrarNombre();  // Imprime: El nombre del perro es: Bobby
    }
}

En este ejemplo, la clase Perro tiene un constructor que recibe un parámetro nombre, y usa super(nombre) para invocar el constructor de la clase Animal y asignar el valor de nombre a la propiedad heredada.

Resumen de los conceptos clave

Ejercicios

  1. Acceso a un método de la superclase: Crea una clase base Vehiculo con un método mover(). Luego, crea una subclase Coche que sobrescriba este método y, en el método de la subclase, usa super.mover() para llamar al método de la clase base.

  2. Uso de super() en el constructor: Crea una clase Persona con un constructor que reciba un nombre y una edad. Luego, crea una subclase Estudiante que reciba un nombre, edad y número de matrícula, y usa super() para llamar al constructor de la clase Persona.

Conclusión

La palabra clave super es fundamental en Java, especialmente cuando se trabaja con herencia. Permite acceder a los miembros de la clase base y llamar a los constructores de la superclase, lo que facilita la reutilización de código y la organización jerárquica de las clases. Al dominar su uso, estarás mejor preparado para escribir aplicaciones más robustas y comprensibles. Te animamos a seguir explorando el concepto de herencia en Java y a practicar con ejercicios más avanzados para mejorar tu comprensión de este tema clave.