Cast di Classi
Il casting è una operazione che converte una variabile da un tipo dati ad un altro. In particolare, per le classi, abbiamo l’upcasting e downcasting.
Upcasting: si “forza” una classe ad essere una sua superclasse. Può essere esplicito, inserendo la superclasse tra parentesi tonde, o implicito.
Esempio
class Animale{ } public class Mucca extends Animale{ public static void main(String[] args) { Animale m = new Mucca(); Mucca m1 = new Mucca(); //Mucca m = new Animale();// da errore di compilazione Animale a = m;//Animale a = (Animale)m; è la stessa cosa Animale a1 = m1; } }
Downcasting: casting da una classe a una sottoclasse. E’ possibile solo se l’oggetto, a run-time, è veramente un oggetto della sottoclasse. Questo controllo è eseguito solo run-time, e viene lanciata, in caso di esito negativo, una ClassCastException.
Esempio
class Animale{ } public class Mucca extends Animale{ public static void main(String[] args) { Animale m1 = new Mucca(); Animale a1 = (Mucca)m1;//downcasting , stiamo dicendo al compilatore che siamo sicuri // che m1, anche se dichiarato di tipo Animale, è in realtà di tipo Mucca Animale m = new Animale(); Animale a = (Mucca)m;//ClassCastException--> sarebbe come eseguire Animale a = (Mucca)new Animale(); } }