Il typecasting è uno dei concetti più importanti che fondamentalmente riguarda la conversione di un tipo di dati in un altro tipo di dati in modo implicito o esplicito. In questo articolo viene discusso il concetto di typecasting per gli oggetti.
Proprio come i tipi di dati, anche gli oggetti possono essere tipizzati. Tuttavia, negli oggetti, esistono solo due tipi di oggetti, ovvero oggetto genitore e oggetto figlio. Pertanto, la tipizzazione degli oggetti significa fondamentalmente che un tipo di oggetto (cioè) è figlio o genitore di un altro. Esistono due tipi di typecasting. Sono:
- Upcasting: l'upcasting è il typecasting di un oggetto figlio in un oggetto genitore . L'upcasting può essere fatto implicitamente. L'upcasting ci dà la flessibilità di accedere ai membri della classe genitore ma non è possibile accedere a tutti i membri della classe figlio utilizzando questa funzionalità. Invece di tutti i membri, possiamo accedere ad alcuni membri specificati della classe figlia. Ad esempio, possiamo accedere ai metodi sovrascritti. Downcasting: Allo stesso modo, downcasting significa il typecasting di a oggetto genitore in un oggetto figlio . Il downcasting non può essere implicito.
L'immagine seguente illustra il concetto di upcasting e downcasting:

Esempio: Lascia che ci sia una classe genitore. Possono esserci molti figli di un genitore. Prendiamo in considerazione uno dei bambini. Il figlio eredita le proprietà del genitore. Pertanto, esiste una relazione è-una tra il bambino e il genitore. Pertanto, il bambino può essere implicitamente sollevato al genitore. Tuttavia, un genitore può ereditare o meno le proprietà del figlio. Tuttavia, possiamo forzare il cast di un genitore a un bambino noto come abbattimento . Dopo aver definito esplicitamente questo tipo di casting, il compilatore controlla in background se questo tipo di casting è possibile o meno. Se non è possibile, il compilatore lancia una ClassCastException .
Comprendiamo il seguente codice per capire la differenza:
Giava
// Java program to demonstrate> // Upcasting Vs Downcasting> // Parent class> class> Parent {> >String name;> >// A method which prints the> >// signature of the parent class> >void> method()> >{> >System.out.println(>'Method from Parent'>);> >}> }> // Child class> class> Child>extends> Parent {> >int> id;> >// Overriding the parent method> >// to print the signature of the> >// child class> >@Override> void> method()> >{> >System.out.println(>'Method from Child'>);> >}> }> // Demo class to see the difference> // between upcasting and downcasting> public> class> GFG {> >// Driver code> >public> static> void> main(String[] args)> >{> >// Upcasting> >Parent p =>new> Child();> >p.name =>'techcodeview.com'>;> >//Printing the parentclass name> >System.out.println(p.name);> >//parent class method is overridden method hence this will be executed> >p.method();> >// Trying to Downcasting Implicitly> >// Child c = new Parent(); ->errore in fase di compilazione> >// Downcasting Explicitly> >Child c = (Child)p;> >c.id =>1>;> >System.out.println(c.name);> >System.out.println(c.id);> >c.method();> >}> }> |
>
>Produzione
techcodeview.com Method from Child techcodeview.com 1 Method from Child>
Una figura illustrativa del programma di cui sopra:

Dall’esempio sopra possiamo osservare i seguenti punti:
- Sintassi dell'upcasting:
Parent p = new Child();>
- L'upcast verrà eseguito internamente e, a causa dell'upcast, all'oggetto è consentito accedere solo ai membri della classe genitore e ai membri specificati della classe figlio (metodi sovrascritti, ecc.) ma non a tutti i membri.
// This variable is not // accessible p.id = 1;>
- Sintassi del downcasting:
Child c = (Child)p;>
- Il downcasting deve essere eseguito esternamente e grazie al downcasting un oggetto figlio può acquisire le proprietà dell'oggetto genitore.
c.name = p.name; i.e., c.name = 'techcodeview.com'>