Menu
Coddy logo textTech

La palabra clave super

Parte de la sección Programación Orientada a Objetos del Journey de Java de Coddy. Lección 21 de 87.

La palabra clave super proporciona una forma para que una subclase haga referencia a su clase madre. Es esencial cuando necesitas acceder a miembros o constructores de la clase madre desde una subclase.

El uso más común de super es llamar al constructor de la clase padre. Esta debe ser la primera instrucción en el constructor de la subclase:

public class Vehicle {
    private String brand;
    
    public Vehicle(String brand) {
        this.brand = brand;
    }
    
    public String getBrand() {
        return brand;
    }
}

public class Car extends Vehicle {
    private int doors;
    
    public Car(String brand, int doors) {
        super(brand);  // Debe ser la primera línea
        this.doors = doors;
    }
}

También puedes usar super para llamar a métodos del padre, lo cual es particularmente útil cuando la subclase tiene un método con el mismo nombre:

public class Animal {
    public void makeSound() {
        System.out.println("Some sound");
    }
}

public class Cat extends Animal {
    public void makeSound() {
        super.makeSound();  // Llama a la versión de Animal
        System.out.println("Meow!");
    }
}

Piense en super como lo opuesto a this. Mientras que this se refiere al objeto actual, super se refiere a la parte de la clase padre de ese objeto. Esta distinción se vuelve crucial al construir jerarquías de clases donde las clases hijas necesitan extender en lugar de reemplazar completamente el comportamiento del padre.

challenge icon

Desafío

Fácil

Construyamos un sistema de electrodomésticos que demuestre cómo las clases hijas pueden usar super para llamar a los constructores de las clases padre y ampliar el comportamiento de los métodos heredados.

Crearás tres archivos para organizar tu código:

  • Appliance.java: Crea la clase padre que representa cualquier electrodoméstico del hogar. Debe tener:
    • Un campo privado para la brand (String) del electrodoméstico
    • Un campo privado para wattage (int)
    • Un constructor que acepte ambos valores y los inicialice
    • Un método getBrand() que devuelva la marca
    • Un método getWattage() que devuelva la potencia
    • Un método getInfo() que devuelva: [brand] - [wattage]W
  • WashingMachine.java: Crea una subclase que extienda Appliance. Una lavadora tiene todo lo que tiene un electrodoméstico, además de sus propias características especiales:
    • Un campo privado para capacity (int) que representa la capacidad de carga en kg
    • Un constructor que reciba la marca, la potencia y la capacidad; usa super(brand, wattage) para inicializar la parte de la clase padre y después establece la capacidad
    • Un método getCapacity() que devuelva la capacidad
    • Un método getInfo() que llame al método getInfo() de la clase padre usando super.getInfo() y lo amplíe para devolver: [parent info], Capacity: [capacity]kg
  • Main.java: Crea una WashingMachine y muestra toda su información. Recibirás tres entradas: la marca (String), la potencia (int) y la capacidad (int). Imprime el resultado de llamar a getInfo() en tu lavadora.

Recibirás tres entradas: el nombre de la marca, la potencia y la capacidad.

Observa cómo super cumple aquí dos propósitos: llamar al constructor de la clase padre para inicializar los campos heredados y llamar al método de la clase padre para basarse en su comportamiento en lugar de reemplazarlo por completo.

Pruébalo tú mismo

import java.util.Scanner;

class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        
        // Leer las entradas
        String brand = scanner.nextLine();
        int wattage = scanner.nextInt();
        int capacity = scanner.nextInt();
        
        // TODO: Crear un objeto WashingMachine con los valores de entrada
        
        // TODO: Imprimir el resultado de llamar a getInfo() en la lavadora
    }
}
quiz iconPonte a prueba

Esta lección incluye un breve cuestionario. Empieza la lección para responderlo y registrar tu progreso.

Todas las lecciones de Programación Orientada a Objetos

Practica por tu cuenta: Compilador de Java online