Está en la página 1de 3

USO DE SUPER

La palabra clave super en Java es una variable de referencia que se usa para referir objetos de
clase padre. Se usa principalmente en los siguientes contextos:

Table de Contenido
• 1. Uso de super con variables
• 2. Uso de super con métodos
• 3. Uso de super con constructores
• 4. Otros puntos importantes de ‘super’

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:

1. /* clase base vehicle */


2. class Vehicle
3. {
4. int maxSpeed = 120;
5. }
1. /* subclase Car extendiendo de vehicle */
2. class Car extends Vehicle
3. {
4. int maxSpeed = 180;
5.
6. void display()
7. {
8. /* imprime maxSpeed de la clase base (vehicle) */
9. System.out.println("Velocidad máxima: " + super.maxSpeed);
10. }
11. }
1. /* Programa de controlador Test */
2. class Test
3. {
4. public static void main(String[] args)
5. {
6. Car small = new Car();
7. small.display();
8. }
9. }
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.
USO DE SUPER
Ejemplo:

1. /* Clase Base Person */


2. class Person
3. {
4. void message()
5. {
6. System.out.println("Esta es una clase persona");
7. }
8. }
1. /* Subclase Student */
2. class Student extends Person
3. {
4. void message()
5. {
6. System.out.println("Esta es una clase estudiante");
7. }
8.
9. // Tenga en cuenta que display() solo está en la clase Student
10. void display()
11. {
12. // invocará o llamará al método message() de la clase actual
13. message();
14.
15. // invocará o llamará al método message() de la clase padre
16. super.message();
17. }
18. }
1. /* Programa Controlador Test */
2. class Test
3. {
4. public static void main(String args[])
5. {
6. Student s = new Student();
7.
8. // llamando a display() de Student
9. s.display();
10. }
11. }
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:
USO DE SUPER
1. /* superclase Person */
2. class Person
3. {
4. Person()
5. {
6. System.out.println("Constructor de la clase Person");
7. }
8. }
1. /* subclase Student extiende de la clase Person */
2. class Student extends Person
3. {
4. Student()
5. {
6. // invoca o llama al constructor de la clase padre
7. super();
8.
9. System.out.println("Constructor de la clase Student");
10. }
11. }
1. /* Programa Controlador Test */
2. class Test
3. {
4. public static void main(String[] args)
5. {
6. Student s = new Student();
7. }
8. }
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.

También podría gustarte