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.
Sfida
FacileCreiamo 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)
- Un metodo
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 metodoformat, 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
}
}
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
1Fondamenti della programmazione a oggetti
File esterniIntroduzione alla programmazione a oggettiClassi e oggettiLa parola chiave thisMetodiCampi (attributi)Metodo costruttoreSovraccarico dei costruttoriRipasso - Calcolatrice semplice4Ereditarietà
Ereditarietà di base (extends)La parola chiave superSovrascrittura dei metodi (@Override)Concatenamento dei costruttoriLa classe ObjectEreditarietà singola e multilivelloPerché non esiste l'ereditarietà multipla delle classiRiepilogo: gerarchia dei dipendenti7Metodi speciali e classe Object
Metodo toString()equals() e hashCode()Metodo clone()compareTo() e ComparableInterfaccia ComparatorRiepilogo - Ordinamento personalizzato2Modificatori di accesso e incapsulamento
Panoramica dei livelli di accessoMetodi getter e setterNascondimento delle informazioniLa parola chiave finalRiepilogo - Gestore di conti bancari5Polimorfismo
Nozioni di base sull'overloading dei metodiOverride dei metodi (a runtime)Upcasting e downcastingL'operatore instanceofClassi e metodi astrattiRiepilogo - Calcolatore di forme8Concetti avanzati di OOP
Composizione vs ereditarietàAggregazione vs composizioneClassi interne, annidate e anonimeEnum e metodi degli EnumRecord (Java 16+)Classi sealed (Java 17+)11Modelli di progettazione Parte 1
Introduzione ai modelli di progettazionePattern SingletonPattern FactoryPattern BuilderPattern ObserverPattern Strategy3Proprietà di classe e membri statici
Variabili di istanza e staticheMetodi staticiBlocchi staticiCostanti (static final)Riepilogo - Contatore e utility6Interfacce e classi astratte
Introduzione alle interfacceImplementazione delle interfacceImplementazione di più interfacceMetodi default e static nelle interfacceClassi astratte e interfacce a confrontoInterfacce funzionaliRiepilogo: sistema di pagamento9Tipi generici
Introduzione ai tipi genericiClassi genericheMetodi genericiParametri di tipo con limitiCaratteri jolly (?, extends, super)Riepilogo - Contenitore generico12Modelli di progettazione – Parte 2
Pattern CommandPattern AdapterPattern DecoratorPattern Template MethodPattern StatePattern CompositePattern IteratorEsercitati da solo: Compilatore Java online