Palabra Clave “super” en Java

Palabra Clave

¿Para qué sirve la palabra clave (keyword) super en Java? La palabra clave “super” entró en escena con el concepto de Herencia y esto es lo que necesitas saber!

La palabra clave super en Java es una variable de referencia que se usa para referir objetos de clase padre (puede revisar sobre Herencia, en este enlace). Se usa principalmente en los siguientes contextos:

1. Uso de super con variables

Este escenario ocurre cuando una clase derivada y una clase base tienen los mismos miembros de datos. En ese caso, existe una posibilidad de ambigüedad para la JVM. Podemos entenderlo más claramente usando este fragmento de código:

Ejemplo:

/* clase base vehicle */
class Vehicle
{
    int maxSpeed = 120;
}
/* subclase Car extendiendo de vehicle */
class Car extends Vehicle
{
    int maxSpeed = 180;
 
    void display()
    {
        /* imprime maxSpeed de la clase base (vehicle) */
        System.out.println("Velocidad máxima: " + super.maxSpeed);
    }
}
/* Programa de controlador Test */
class Test
{
    public static void main(String[] args)
    {
        Car small = new Car();
        small.display();
    }
}

Salida:

Velocidad máxima: 120

En el ejemplo anterior, tanto la clase base como la subclase tienen un miembro maxSpeed. Podríamos acceder a maxSpeed ​​de la clase base en la sublcase usando la palabra clave super.

2. Uso de super con métodos

Esto se usa cuando queremos llamar al método de clase padre. Entonces, cuando una clase padre e hijo tienen los mismos métodos nombrados, entonces para resolver la ambigüedad utilizamos la palabra clave super. Este fragmento de código ayuda a comprender el uso dicho de la palabra clave super.

Ejemplo:

/* Clase Base Person */
class Person
{
    void message()
    {
        System.out.println("Esta es una clase persona");
    }
}
/* Subclase Student */
class Student extends Person
{
    void message()
    {
        System.out.println("Esta es una clase estudiante");
    }
 
    // Tenga en cuenta que display() solo está en la clase Student
    void display()
    {
        // invocará o llamará al método message() de la clase actual
        message();
 
        // invocará o llamará al método message() de la clase padre
        super.message();
    }
}
/* Programa Controlador Test */
class Test
{
    public static void main(String args[])
    {
        Student s = new Student();
 
        // llamando a display() de Student
        s.display();
    }
}

Salida:

Esta es una clase estudiante
Esta es una clase persona

En el ejemplo anterior, hemos visto que si solo llamamos al método message(), entonces se invoca el message() de la clase actual, pero con el uso de la palabra clave super, también se puede invocar a message() de la superclase.

3. Uso de super con constructores

La palabra clave super también se puede usar para acceder al constructor de la clase padre. Una cosa más importante es que ”super” puede llamar constructores tanto con parámetros como sin parámetros dependiendo de la situación. A continuación se muestra el fragmento de código para explicar el concepto anterior:

Ejemplo:

/* superclase Person */
class Person
{
    Person()
    {
        System.out.println("Constructor de la clase Person");
    }
}
/* subclase Student extiende de la clase Person */
class Student extends Person
{
    Student()
    {
        // invoca o llama al constructor de la clase padre
        super();
 
        System.out.println("Constructor de la clase Student");
    }
}
/* Programa Controlador Test */
class Test
{
    public static void main(String[] args)
    {
        Student s = new Student();
    }
}

Salida:

Constructor de la clase Person
Constructor de la clase Student

En el ejemplo anterior hemos llamado al constructor de la superclase usando la palabra clave ‘super‘ a través del constructor de la subclase.

4. Otros puntos importantes de ‘super’

  • La llamada a super() debe ser la primera instrucción en el constructor de la clase derivada (Student en el ejemplo).
  • Si un constructor no invoca explícitamente un constructor de superclase, el compilador de Java inserta automáticamente una llamada al constructor sin argumento de la superclase. Si la superclase no tiene un constructor sin argumentos, obtendrá un error en tiempo de compilación. Por ejemplo, el objeto hace tener un constructor, por lo que si objeto es la única superclase, no hay ningún problema.
  • Si un constructor de una subclase invoca un constructor de su superclase, ya sea explícita o implícitamente, puede pensar que se llamó a toda una cadena de constructores, todo el camino de regreso al constructor de Object. Esto, de hecho, es el caso. Se llama encadenamiento de constructores.
Keyword en Java
  • Super con Ejemplos

Sobre el Autor:

Hey hola! Yo soy Alex Walton y tengo el placer de compartir conocimientos hacía ti sobre el tema de Programación en Java, desde cero, Online y Gratis.

0 comentarios

  1. […] Podemos escribir un constructor de subclase que invoca el constructor de la superclase, ya sea implícitamente o mediante la palabra clave super. […]

Deja una Respuesta

*

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.