Contenuti del Corso
Java Avanzato
Java Avanzato
Sovraccarico dei Metodi
Utilizzo di un metodo con parametri diversi
Java consente di scrivere diversi metodi con lo stesso nome. Questi metodi possono avere tipi di ritorno e/o tipi di parametri differenti. Questo viene fatto per poter utilizzare questi metodi con diversi tipi di dati. Prendiamo come esempio un metodo per stampare un array:
Possiamo scrivere questo metodo per accettare valori di tipo int
, ma cosa succede se dobbiamo stampare un array di tipo char
? Dobbiamo scrivere un metodo con un nome diverso?
Java offre la sovraccarica dei metodi per questo scopo.
Vediamo un esempio di stampa dei dati e di inversione di un array dal capitolo precedente:
Main.java
// method to reverse an int array static int[] flipArray(int[] array) { // creating a new array to store the reversed elements int[] result = new int[array.length]; int index = 0; // iterating over the input array in reverse order for (int i = array.length - 1; i > 0; i--) { result[index] = array[i]; index++; } // returning the reversed int array return result; } // method to reverse a char array static char[] flipArray(char[] array) { // creating a new array to store the reversed elements char[] result = new char[array.length]; int index = 0; // iterating over the input array in reverse order for (int i = array.length - 1; i >= 0; i--) { result[index] = array[i]; index++; } // returning the reversed char array return result; }
Abbiamo sovraccaricato il metodo flipArray
per accettare e restituire parametri diversi: int
e char
. Se invochiamo questo metodo, può accettare e restituire sia tipi int
che char
.
Ora sovraccarichiamo il metodo per visualizzare un array sullo schermo. Anche questo metodo deve accettare e restituire tipi int
e char
:
Main.java
// method to print an int array static void printArrayToTheConsole(int[] array) { // iterating through each element of the int array for (int element : array) { System.out.print(element + " "); } // printing a blank line after the array System.out.println(); } // method to print a char array static void printArrayToTheConsole(char[] array) { // iterating through each element of the char array for (char element : array) { System.out.print(element + " "); } // printing a blank line after the array System.out.println(); }
Qui abbiamo sovraccaricato il metodo printArrayToTheConsole
per accettare e restituire valori di tipo int
e char
.
Ora combiniamo i metodi sovraccaricati e utilizziamoli nel metodo main
per un array di tipo int
e un array di tipo char
:
Main.java
package com.example; public class Main { // main method to run the application public static void main(String[] args) { // do not modify the code below int[] intArray = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10}; char[] charArray = {'s', 'b', 'c', 'd', 'e', 'f', 'g'}; printArrayToTheConsole(flipArray(intArray)); printArrayToTheConsole(flipArray(charArray)); } // method to reverse an int array static int[] flipArray(int[] array) { int[] result = new int[array.length]; int index = 0; // iterating over the array in reverse order for (int i = array.length - 1; i > 0; i--) { result[index] = array[i]; index++; } return result; } // method to reverse a char array static char[] flipArray(char[] array) { char[] result = new char[array.length]; int index = 0; // iterating over the array in reverse order for (int i = array.length - 1; i >= 0; i--) { result[index] = array[i]; index++; } return result; } // method to print an int array to the console static void printArrayToTheConsole(int[] array) { // printing each element of the int array for (int element : array) { System.out.print(element + " "); } System.out.println(); } // method to print a char array to the console static void printArrayToTheConsole(char[] array) { // printing each element of the char array for (char element : array) { System.out.print(element + " "); } System.out.println(); } }
Abbiamo sovraccaricato due diversi metodi aggiungendo la possibilità di utilizzare questi metodi con array di tipo char
. Abbiamo anche leggermente modificato i nomi di questi metodi, poiché ora possiamo sovraccaricarli più volte per accettare e restituire valori di tipi diversi.
Per verificarlo, abbiamo creato due array differenti, uno di tipo int
e l'altro di tipo char
, e poi abbiamo passato questi array ai metodi sovraccaricati, ottenendo i risultati corretti.
A proposito, hai già incontrato metodi sovraccaricati in precedenza.
Ad esempio, il metodo String
della classe substring()
è sovraccaricato e può avere un solo parametro, int beginIndex
, oppure due parametri, int beginIndex, int endIndex
.
Il sovraccarico dei metodi è molto utile ed è comunemente utilizzato nella pratica.
Grazie per i tuoi commenti!