Menu
Coddy logo textTech

La parola chiave super

Fa parte della sezione Programmazione orientata agli oggetti del percorso Java di Coddy. Lezione 21 di 87.

La parola chiave super offre a una sottoclasse un modo per fare riferimento alla sua classe genitore. È essenziale quando devi accedere ai membri o ai costruttori della classe genitore dall'interno di una classe figlia.

L'uso più comune di super è chiamare il costruttore della classe padre. Questa deve essere la prima istruzione nel costruttore della sottoclasse:

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);  // Deve essere la prima riga
        this.doors = doors;
    }
}

Puoi anche usare super per chiamare i metodi della classe genitore, il che è particolarmente utile quando la sottoclasse ha un metodo con lo stesso nome:

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

public class Cat extends Animal {
    public void makeSound() {
        super.makeSound();  // Chiama la versione di Animal
        System.out.println("Meow!");
    }
}

Considera super come l'opposto di this. Mentre this si riferisce all'oggetto corrente, super si riferisce alla parte di quell'oggetto appartenente alla classe genitore. Questa distinzione diventa fondamentale quando si creano gerarchie di classi in cui le classi figlie devono estendere il comportamento della classe genitore, anziché sostituirlo completamente.

challenge icon

Sfida

Facile

Costruiamo un sistema di elettrodomestici che dimostri come le classi figlie possono usare super per chiamare i costruttori della classe genitore ed estendere il comportamento dei metodi della classe genitore.

Creerai tre file per organizzare il tuo codice:

  • Appliance.java: crea la classe genitore che rappresenta qualsiasi elettrodomestico. Dovrebbe avere:
    • Un campo privato per la brand dell'elettrodomestico (String)
    • Un campo privato per wattage (int)
    • Un costruttore che accetta entrambi i valori e li inizializza
    • Un metodo getBrand() che restituisce la marca
    • Un metodo getWattage() che restituisce la potenza
    • Un metodo getInfo() che restituisce: [brand] - [wattage]W
  • WashingMachine.java: crea una sottoclasse che estende Appliance. Una lavatrice ha tutto ciò che ha un elettrodomestico, oltre a caratteristiche speciali proprie:
    • Un campo privato per capacity (int), che rappresenta la capacità di carico in kg
    • Un costruttore che accetta brand, wattage e capacity: usa super(brand, wattage) per inizializzare la parte della classe genitore, quindi imposta la capacità
    • Un metodo getCapacity() che restituisce la capacità
    • Un metodo getInfo() che chiama il metodo getInfo() della classe genitore usando super.getInfo() e lo estende per restituire: [parent info], Capacity: [capacity]kg
  • Main.java: crea una WashingMachine e visualizza tutte le sue informazioni. Riceverai tre input: la marca (String), la potenza (int) e la capacità (int). Stampa il risultato della chiamata a getInfo() sulla tua lavatrice.

Riceverai tre input: il nome della marca, la potenza e la capacità.

Nota come super abbia qui due scopi: chiamare il costruttore della classe genitore per inizializzare i campi ereditati e chiamare il metodo della classe genitore per estenderne il comportamento anziché sostituirlo completamente.

Provalo tu

import java.util.Scanner;

class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        
        // Leggi i dati di input
        String brand = scanner.nextLine();
        int wattage = scanner.nextInt();
        int capacity = scanner.nextInt();
        
        // TODO: Crea un oggetto WashingMachine con i valori di input
        
        // TODO: Stampa il risultato della chiamata a getInfo() sulla lavatrice
    }
}
quiz iconMettiti alla prova

Questa lezione include un breve quiz. Inizia la lezione per rispondere e tenere traccia dei tuoi progressi.

Tutte le lezioni di Programmazione orientata agli oggetti

Esercitati da solo: Compilatore Java online