Junior
Cosa si può modificare durante il sovraccarico dei metodi in programmazione?
sobes.tech AI
Risposta dell'AI
Nel sovraccarico di metodi (method overloading) è possibile modificare:
- Numero di parametri: I metodi con lo stesso nome possono avere un numero diverso di parametri formali.
- Tipi di parametri: I metodi con lo stesso nome e lo stesso numero di parametri possono differire nei tipi di questi parametri.
- Ordine dei tipi di parametri: Se i metodi hanno lo stesso numero di parametri e gli stessi tipi, ma in ordine diverso, si considera comunque sovraccarico.
Esempio in Java:
// Classe con metodi sovraccaricati
class Calculator {
// Metodo di somma di due numeri interi
public int add(int a, int b) {
return a + b;
}
// Metodo sovraccaricato: somma di tre numeri interi
public int add(int a, int b, int c) {
return a + b + c;
}
// Metodo sovraccaricato: somma di due numeri con virgola mobile
public double add(double a, double b) {
return a + b;
}
// Metodo sovraccaricato: somma di un intero e un numero con virgola mobile
public double add(int a, double b) {
return a + b;
}
// Metodo sovraccaricato: somma di un numero con virgola mobile e un intero
public double add(double a, int b) {
return a + b;
}
}
Cosa non si può modificare nella sovraccarico di metodi:
- Tipo di ritorno: Due metodi con lo stesso nome e la stessa firma (numero, tipi e ordine dei parametri) non possono differire solo per il tipo di ritorno.
- Modificatori di accesso: I modificatori di accesso (public, private, protected, default) non influenzano la sovraccarico.
- Presenza o assenza della parola chiave
static: Non si può sovraccaricare un metodo statico definendo un metodo non statico con la stessa firma, o viceversa. - Lista delle eccezioni lanciate dal metodo: La lista delle eccezioni non fa parte della firma del metodo, e il compilatore non la usa per distinguere i metodi sovraccaricati.
Confronto tra sovraccarico e overriding di metodi:
| Caratteristica | Sovraccarico (Overloading) | Overriding (Sovrascrittura) |
|---|---|---|
| Dove avviene | In una stessa classe o in una gerarchia di classi | Nella classe figlia |
| Nome del metodo | Uguale | Uguale |
| Firma del metodo | Diversa (numero, tipi, ordine dei parametri) | Uguale |
| Tipo di ritorno | Può essere diverso (ma non l'unica differenza) | Deve essere uguale o covariante (per oggetti) |
| Scopo | Fornire diverse varianti di un'azione per diversi tipi di dati o quantità di argomenti | Modificare il comportamento del metodo ereditato nella classe figlia |
| Relazione tra metodi | Metodi indipendenti | Relazione di "è un" (ereditarietà) |
| Polimorfismo | Polimorfismo in fase di compilazione (statico) | Polimorfismo in fase di esecuzione (dinamico) |