Java/Metodi: differenze tra le versioni

Contenuto cancellato Contenuto aggiunto
FrescoBot (discussione | contributi)
m Bot: apostrofo dopo l'articolo indeterminativo
Riga 203:
 
== Overloading e Overriding ==
L''''overloading''' è la possibilità di creare più metodi con lo stesso nome e nella stessa classe con argomenti diversi per numero o tipo, mentre l''''overriding''' è la possibilità di richiamare un certo metodo anche senza ricorrere a un'istanza della classe.
 
Vediamo un esempio con una classe che gestisce delle date:
class Data{
int giorno;
int mese;
int anno;
public void Data(){
this.giorno=1;
this.mese=1;
this.anno=2000;
}
public void Data(int giorno, int mese, int anno){
this.giorno=giorno;
this.mese=mese;
this.anno=anno;
}
}
 
Esistono due costruttori Data, che in un linguaggio come il C genererebbero un errore, poiché il compilatore non saprebbe a cosa si fa riferimento quando si richiama il metodo.
In Java l'ambiguità è risolta dal numero e dal tipo di argomenti richiesti dai metodi, quindi richiamando un metodo verrà di volta in volta scelto tra gli ononimi quello che richiede il numero e il tipo di argomenti richiesti.
Dunque scrivendo
Data compleanno=new Data();
si creerà un oggetto Data inizializzato al capodanno 2000, poiché non si è fornito alcun valore al costruttore, mentre usando
Data compleanno=new Data(3,11,2005);
la JVM utilizzerà il secondo costruttore e inizializzerà l'oggetto al 5 novembre 2005.
 
L''''override''' si ottiene quando si usa la parola chiave '''static''' nella dichiarazione di un metodo, permettendo così l'invocazione del metodo al di fuori di un'istanza specifica della classe, esattamente come le funzioni nei linguaggi non OOP. Ad esempio:
class Cane{
public static void abbaia(){
System.out.println("Woof!");
}
}
Creerà una classe "Cane" il cui metodo "abbaia" potrà essere usato anche senza aver creato un oggetto cane, in questo modo:
Cane.abbaia();
La sintassi è ''NomeDellaClasse.NomeDelMetodo(eventuali argomenti)''.
 
È ovviamente possibile creare dei metodi con lo stesso nome e static, combinando così overload e override
 
== This e Super ==