In Java, l’upcasting e il downcasting sono due concetti fondamentali nella programmazione orientata agli oggetti (OOP) che si riferiscono alla conversione di tipi di dati tra classi e sottoclassi.

Upcasting

L’upcasting è il processo di conversione del tipo del riferimento di un oggetto nel tipo della sua super classe.

Ci permette trattare un oggetto come se fosse un oggetto della super classe, accedendo soltanto ai metodi e campi della super classe.

Questo può avvenire anche con un casting implicito.

Gatto g = new Gatto(); // (Gatto estende Animale)

ArrayList animali = new ArrayList();
animali.add(c); // casting implicito animali.add(g); // casting implicito

Downcasting

l downcasting è il processo di conversione del tipo del riferimento di un oggetto nel tipo di una sua sottoclasse.

Ci permette trattare un oggetto come se fosse un oggetto di una sua sotto classe, accedendo ai sui specifici metodi e campi.

Questo deve avvenire con un cast esplicito e se la il tipo specificato non corrisponde a quello dell’oggetto viene sollevata un eccezione.

Osservazioni

Casting Implicito ed Esplicito

  • Il casting implicito avviene quando il compilatore può determinare automaticamente il tipo di conversione
  • Il casting esplicito richiede l’uso di parentesi per specificare il tipo di conversione.

Oggetto in Memoria

Il casting non cambia il tipo dell’oggetto in memoria, ma solo come viene visto dalla variabile che lo contiene.