Gruki Logo

Gruki - Documentación de Programación

Java

Entendiendo 'super' en Java: ¡Como pedir ayuda a Papá!

Aprende cómo usar 'super' en Java para acceder a métodos y variables de la clase padre. Explicaciones sencillas con ejemplos fáciles de entender, ¡incluso para un niño!

En Java, a veces tenemos clases que se parecen a sus 'padres'. Imagina que tienes una clase 'Coche' y otra 'CocheDeCarreras'. 'CocheDeCarreras' hereda las características de 'Coche', ¡como las ruedas y el motor! Usamos 'super' para pedir ayuda a la clase 'padre' (en este caso 'Coche').

Piensa en 'super' como si estuvieras pidiendo ayuda a tu papá para armar un juguete. Tú sabes cómo armarlo, pero necesitas una herramienta especial que tu papá tiene. 'super' te permite usar esa 'herramienta' de la clase padre.

¿Para qué sirve 'super'? Dos usos principales

Hay dos cosas importantes para las que usamos 'super':

1. Llamar al constructor de la clase padre: El 'constructor' es como las instrucciones iniciales para construir un objeto. A veces, la clase hija (como 'CocheDeCarreras') necesita que el constructor de la clase padre ('Coche') se ejecute primero para preparar todo.

2. Acceder a métodos y variables de la clase padre: Si la clase hija tiene un método con el mismo nombre que uno de la clase padre, 'super' te permite usar el método *del padre* en lugar del propio.

Puntos importantes:

  • ¡No siempre es necesario usar 'super'! Lo usas cuando quieres algo específico de la clase padre.
  • Si la clase hija no tiene un método con el mismo nombre que la clase padre, puedes usar el método de la clase padre directamente sin 'super'.

Ejemplo práctico: El Coche y el CocheDeCarreras

Imagina un 'Coche' con una velocidad máxima. Un 'CocheDeCarreras' también tiene una velocidad máxima, ¡pero es más alta! Podemos usar 'super' para inicializar la velocidad máxima *base* del coche normal y luego aumentarla en el 'CocheDeCarreras'.

Ejemplos de Código

Ejemplo de cómo usar 'super' para llamar al constructor de la clase padre y acceder a un método.

Lenguaje: Java

Explicación del código:

  1. Línea 1: `class Coche { ... }`: Definimos la clase 'Coche', que es la clase padre.
  2. Línea 2: `protected int velocidadMaxima;`: Definimos una variable llamada 'velocidadMaxima' en la clase Coche. 'Protected' significa que las clases hijas pueden acceder a ella directamente.
  3. Línea 3: `public Coche(int velocidadMaxima) { ... }`: Este es el constructor de la clase 'Coche'. Recibe la velocidad máxima como parámetro y la asigna a la variable 'velocidadMaxima' de la clase. Cuando creas un 'Coche', este constructor se encarga de prepararlo.
  4. Línea 4: `this.velocidadMaxima = velocidadMaxima;`: Asigna el valor del parámetro `velocidadMaxima` a la variable de instancia `velocidadMaxima` de la clase. El `this` se refiere al objeto actual de la clase `Coche`.
  5. Línea 5: `System.out.println("Constructor de Coche: Velocidad Maxima = " + velocidadMaxima);`: Imprime un mensaje que indica que el constructor de 'Coche' se está ejecutando y muestra la velocidad máxima.
  6. Línea 6: `public void acelerar() { ... }`: Este es un método en la clase 'Coche' que simula la aceleración.
  7. Línea 7: `System.out.println("Coche acelerando a: " + velocidadMaxima + " km/h");`: Imprime un mensaje que indica que el coche está acelerando y muestra su velocidad máxima.
  8. Línea 8: `class CocheDeCarreras extends Coche { ... }`: Definimos la clase 'CocheDeCarreras', que hereda (extiende) de la clase 'Coche'. ¡Esto significa que 'CocheDeCarreras' tiene todas las características de 'Coche' y algunas más!
  9. Línea 9: `private int nitro;`: Agregamos una variable adicional llamada 'nitro' a la clase 'CocheDeCarreras'. 'Private' significa que solo la clase 'CocheDeCarreras' puede acceder a ella directamente.
  10. Línea 10: `public CocheDeCarreras(int velocidadMaxima, int nitro) { ... }`: Este es el constructor de la clase 'CocheDeCarreras'. Recibe la velocidad máxima y la cantidad de nitro como parámetros.
  11. Línea 11: `super(velocidadMaxima);`: ¡Aquí está 'super' en acción! Llamamos al constructor de la clase padre ('Coche') para inicializar la velocidad máxima *antes* de hacer cualquier otra cosa. Es como decirle: "Papá, por favor, encárgate primero de la velocidad base del coche."
  12. Línea 12: `this.nitro = nitro;`: Asigna el valor del parámetro `nitro` a la variable de instancia `nitro` de la clase `CocheDeCarreras`.
  13. Línea 13: `System.out.println("Constructor de CocheDeCarreras: Nitro = " + nitro);`: Imprime un mensaje que indica que el constructor de 'CocheDeCarreras' se está ejecutando y muestra la cantidad de nitro.
  14. Línea 14: `@Override public void acelerar() { ... }`: Aquí estamos *reemplazando* el método 'acelerar' de la clase 'Coche'. 'CocheDeCarreras' tiene su propia forma de acelerar.
  15. Línea 15: `super.acelerar();`: ¡Aquí usamos 'super' *otra vez*! Llamamos al método 'acelerar' de la clase padre ('Coche'). Esto significa que el coche de carreras también hará lo que hace un coche normal al acelerar.
  16. Línea 16: `System.out.println("¡Coche de carreras acelerando con nitro! Velocidad adicional: " + nitro + " km/h");`: Agregamos un mensaje que indica que el coche de carreras está usando nitro y muestra la velocidad adicional.
  17. Línea 17: `public static void main(String[] args) { ... }`: Este es el método principal que se ejecuta cuando corremos el programa.
  18. Línea 18: `CocheDeCarreras miCocheDeCarreras = new CocheDeCarreras(200, 50);`: Creamos un nuevo objeto 'CocheDeCarreras' con una velocidad máxima de 200 y 50 unidades de nitro.
  19. Línea 19: `miCocheDeCarreras.acelerar();`: Llamamos al método 'acelerar' del objeto 'miCocheDeCarreras'. ¡Verás que primero se ejecuta el método 'acelerar' de la clase 'Coche' y luego el de la clase 'CocheDeCarreras'!

Recursos relacionados

Explora más contenido relacionado con Uso de super para acceder a la clase padre. para profundizar tus conocimientos.