Introduzione
Sovrascrittura e surraccarico sono concetti fondamentali nella programmazione Java. Sono modalità per implementare il polimorfismo nei nostri programmi Java. Il polimorfismo è uno dei concetti OOPS.

Quando la firma di un metodo (nome e parametri) è la stessa nella superclasse e nella sottoclasse, si chiama sovrascrittura. Quando due o più metodi nella stessa classe hanno lo stesso nome ma parametri diversi, si chiama surraccarico.
Confronto tra sovrascrittura e surraccarico
Overriding | Overloading |
---|---|
Implements “runtime polymorphism” | Implements “compile time polymorphism” |
The method call is determined at runtime based on the object type | The method call is determined at compile time |
Occurs between superclass and subclass | Occurs between the methods in the same class |
Have the same signature (name and method arguments) | Have the same name, but the parameters are different |
On error, the effect will be visible at runtime | On error, it can be caught at compile time |
Esempio di sovrascrittura e surraccarico
Ecco un esempio di surraccarico e sovrascrittura in un programma Java:
package com.journaldev.examples;
import java.util.Arrays;
public class Processor {
public void process(int i, int j) {
System.out.printf("Processing two integers:%d, %d", i, j);
}
public void process(int[] ints) {
System.out.println("Adding integer array:" + Arrays.toString(ints));
}
public void process(Object[] objs) {
System.out.println("Adding integer array:" + Arrays.toString(objs));
}
}
class MathProcessor extends Processor {
@Override
public void process(int i, int j) {
System.out.println("Sum of integers is " + (i + j));
}
@Override
public void process(int[] ints) {
int sum = 0;
for (int i : ints) {
sum += i;
}
System.out.println("Sum of integer array elements is " + sum);
}
}
Sovrascrittura
Il metodo process()
e i parametri int i, int j
in Processor
sono sovrascritti nella classe figlia MathProcessor
. Linea 7 e linea 23:
public class Processor {
public void process(int i, int j) { /* ... */ }
}
/* ... */
class MathProcessor extends Processor {
@Override
public void process(int i, int j) { /* ... */ }
}
E il metodo process()
e int[] ints
in Processor
sono anche sovrascritti nella classe figlia. Linea 11 e linea 28:
public class Processor {
public void process(int[] ints) { /* ... */ }
}
/* ... */
class MathProcessor extends Processor {
@Override
public void process(Object[] objs) { /* ... */ }
}
Overloading
Il metodo process()
è sovraccaricato nella classe Processor
. Linee 7, 11 e 15:
public class Processor {
public void process(int i, int j) { /* ... */ }
public void process(int[] ints) { /* ... */ }
public void process(Object[] objs) { /* ... */ }
}
Conclusion
In questo articolo, abbiamo trattato l’override e il sovraccarico in Java. L’override si verifica quando la firma del metodo è la stessa nella superclasse e nella classe figlia. Il sovraccarico si verifica quando due o più metodi nella stessa classe hanno lo stesso nome ma parametri diversi.
Source:
https://www.digitalocean.com/community/tutorials/overriding-vs-overloading-in-java