Override vs Sovraccarico in Java

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.

Screenshot of Java code with arrows pointing at instances where overloading and overriding are occurring.

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