Menu
Coddy logo textTech

Nozioni di base sull'overloading dei metodi

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

Polimorfismo significa «molte forme». In Java, permette agli oggetti di comportarsi in modo diverso a seconda del contesto. Una forma di polimorfismo è l'overloading dei metodi, chiamato anche polimorfismo a tempo di compilazione perché Java determina quale metodo chiamare durante la compilazione.

Il sovraccarico dei metodi ti permette di definire più metodi con lo stesso nome ma con parametri diversi. Il compilatore li distingue in base al numero, al tipo o all’ordine dei parametri:

public class Calculator {
    public int add(int a, int b) {
        return a + b;
    }
    
    public int add(int a, int b, int c) {
        return a + b + c;
    }
    
    public double add(double a, double b) {
        return a + b;
    }
}

Quando chiami add(5, 3), Java usa il primo metodo. Chiamare add(5, 3, 2) attiva il secondo e add(5.0, 3.0) richiama il terzo. Il compilatore sceglie la versione corretta in base agli argomenti che fornisci.

Nota che modificare solo il tipo restituito non è un overload valido. L’elenco dei parametri deve essere diverso:

// Overloading NON valido - non verrà compilato
public int getValue() { return 1; }
public double getValue() { return 1.0; }  // Errore!

In realtà hai già visto l'overloading con l'overloading dei costruttori. L'overloading dei metodi segue le stesse regole e offre flessibilità, consentendo a un solo nome di metodo di gestire scenari di input diversi.

challenge icon

Sfida

Facile

Creiamo un formattatore di messaggi che dimostri l'overloading dei metodi offrendo diversi modi per formattare i messaggi. Creerai una classe di utilità con diversi metodi format sovraccaricati, che gestiscono scenari di input differenti.

Organizzerai il tuo codice in due file:

  • MessageFormatter.java: crea una classe che offre una formattazione flessibile dei messaggi tramite metodi sovraccaricati. Il tuo formattatore dovrà avere:
    • Un metodo format(String message) che restituisce il messaggio racchiuso tra parentesi quadre: [message]
    • Un metodo format(String message, int repeatCount) che restituisce il messaggio ripetuto il numero di volte specificato, separato da spazi
    • Un metodo format(String message, String prefix) che restituisce il messaggio con il prefisso anteposto: prefix: message
    • Un metodo format(String message, String prefix, String suffix) che restituisce: prefix: message (suffix)
    Il compilatore sceglierà il metodo corretto in base agli argomenti che passi: questo è il polimorfismo a tempo di compilazione in azione!
  • Main.java: mostra il funzionamento congiunto di tutti e quattro i metodi sovraccaricati. Riceverai quattro input: un messaggio (String), un numero di ripetizioni (int), un prefisso (String) e un suffisso (String). Crea un oggetto MessageFormatter e chiama ogni versione del metodo format, stampando ogni risultato su una riga separata:
    • Per prima cosa, formatta usando solo il messaggio
    • In secondo luogo, formatta usando il messaggio e il numero di ripetizioni
    • In terzo luogo, formatta usando il messaggio e il prefisso
    • Infine, formatta usando il messaggio, il prefisso e il suffisso

Riceverai quattro input: il testo del messaggio, quante volte ripeterlo, una stringa per il prefisso e una stringa per il suffisso.

Per esempio, se il messaggio è "Hello", il numero di ripetizioni è 3, il prefisso è "INFO" e il suffisso è "done", il tuo output dovrà mostrare quattro diverse versioni formattate dello stesso messaggio, ciascuna ottenuta usando un metodo sovraccaricato diverso!

Provalo tu

import java.util.Scanner;

class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        
        // Leggi gli input
        String message = scanner.nextLine();
        int repeatCount = Integer.parseInt(scanner.nextLine());
        String prefix = scanner.nextLine();
        String suffix = scanner.nextLine();
        
        // TODO: Crea un oggetto MessageFormatter
        
        // TODO: Chiama format passando solo message e stampa il risultato
        
        // TODO: Chiama format passando message e repeatCount e stampa il risultato
        
        // TODO: Chiama format passando message e prefix e stampa il risultato
        
        // TODO: Chiama format passando message, prefix e suffix e stampa il risultato
        
    }
}
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