Che cos'è l'upcasting e il downcasting in Java? Spiegazione semplice
Pubblicato: 2021-01-22Sommario
Upcast e downcast in Java
Il typecasting in Java si riferisce alla procedura che prevede la conversione di un tipo di dati in un altro. Questo può essere fatto sia automaticamente che manualmente. Mentre un programmatore deve eseguire la conversione manuale da solo, per il processo automatico viene utilizzato un compilatore. Il downcasting e l'upcasting sono essenzialmente due tipi di typecasting di oggetti.
Gli oggetti figlio e genitore sono due tipi distinti di oggetti. Ora, ci sono due modi con l'aiuto dei quali gli oggetti possono essere inizializzati, ereditando successivamente anche le proprietà che hanno le classi figlio e genitore. Questi modi includono:
- Child c = new Child(): accede a tutti i membri appartenenti alle classi figlio e genitore
- Parent p = new Child(): accede solo ai membri della classe padre, così come ai metodi che sono stati sovrascritti nella classe figlia
In sostanza, il casting del tipo da padre a figlio è noto come upcasting, mentre il casting di tipo da figlio a padre è denominato downcasting.
Il sistema di typecasting viene utilizzato per assicurarsi che le variabili vengano elaborate da una funzione in modo accurato o meno. Sebbene il downcasting non sia possibile in modo implicito, è possibile eseguire l'upcasting sia in modo esplicito che implicito.
Sia il downcasting che l'upcasting sono elementi importanti di Java e consentono alle persone di sviluppare programmi complessi con l'uso di una sintassi semplice. Hanno anche alcuni grandi vantaggi come il raggruppamento di oggetti diversi o il polimorfismo.
Impara i corsi di sviluppo software online dalle migliori università del mondo. Guadagna programmi Executive PG, programmi di certificazione avanzati o programmi di master per accelerare la tua carriera.

Upcasting
Nell'upcasting, un oggetto figlio è un typecast in un oggetto di classe padre. Con l'uso di questo processo, le persone possono usufruire facilmente dell'accesso ai metodi e alle variabili distinti della classe da genitore a figlio. Nel processo è richiesto l'accesso solo ad alcuni metodi e variabili particolari della classe figlia, come i metodi sottoposti a override. In molti casi, l'upcasting è anche chiamato ampliamento e generalizzazione. L'upcasting può essere eseguito in modo implicito e offre alle persone la flessibilità di accedere ai membri della classe genitore.
L'esempio seguente può aiutare a fornire una migliore comprensione del processo.
Esempio: esiste una classe animale che presenta diverse classi di animali, tra cui i pesci. Ora, supponendo che la classe animale sia estesa dalla classe pesce, ci sarebbero due modi di ereditare. L'ereditarietà è uno degli aspetti chiave della programmazione orientata agli oggetti o OOP che consente a una classe di ereditare le caratteristiche di un'altra. Ciò implica la classe derivata che è un superset della classe base. Potrebbero essere presenti più metodi qui rispetto alla classe base. Durante l'upcast, l'unica cosa che può succedere con l'interfaccia di classe è che può finire per perdere metodi piuttosto che guadagnarli. Di conseguenza, il compilatore abilita l'upcast senza alcun tipo di notazioni speciali o cast espliciti.
Composizione vs eredità
Quando si tratta di programmazione orientata agli oggetti, c'è un'alta probabilità che si possa finire per creare e utilizzare fatto semplicemente impacchettando metodi e dati insieme in una classe, mentre successivamente si utilizzano gli oggetti presenti in quella classe. Le persone possono persino utilizzare alcune classi esistenti per sviluppare nuove classi con composizione. L'ereditarietà è usata relativamente raramente. Mentre l'apprendimento dell'OPP, anche se l'ereditarietà ottiene molta attenzione, è importante che gli sviluppatori ne conoscano l'utilizzo corretto e non cerchino di usarlo semplicemente ovunque possono.
In effetti, è necessario utilizzarlo abbastanza raramente, solo per gli scenari in cui l'ereditarietà è effettivamente utile. Uno dei modi più semplici per identificare se una persona dovrebbe usare l'ereditarietà o la composizione è chiedersi se ha bisogno di passare dal nuovo cast al cast di base. Nel caso in cui l'upcasting sia una necessità, allora si dovrebbe usare l'ereditarietà. Tuttavia, se non è un requisito, è necessario soffermarsi ulteriormente sulla necessità dell'eredità.

Abbassamento
Il downcasting è un'altra forma di cast del tipo di oggetto e viene utilizzato per assegnare l'oggetto di riferimento alla sottoclasse alla classe padre che non è consentito in Java. Downcast non è troppo difficile da capire. Ad esempio, se esiste una classe base e una classe che deriva indirettamente o indirettamente dalla classe base, ogni volta che un oggetto del tipo di classe base viene convertito in una classe derivata, viene definito downcast. Di conseguenza, come per il downcasting, si dovrebbe scendere nel diagramma di ereditarietà sforzandosi di prendere un oggetto di classe base e quindi convertendolo in un tipo di classe derivata. Tuttavia, è importante notare che, in base al codice che viene scritto, il downcasting può avere o non avere senso.
Man mano che le persone eseguono il sistema di downcasting, non incontreranno alcun tipo di errore del compilatore. Tuttavia, dovrebbero affrontare java.lang.ClassCastException, che è un'eccezione di runtime. Quindi ora sorge la domanda se il downcasting non è possibile in Java, perché le persone lo eseguono? In parole povere, il downcasting può essere utilizzato solo in situazioni particolari in cui l'oggetto a cui fa riferimento la classe genitore appartiene a una sottoclasse.
Il downcasting può essere estremamente utile quando si confronta un oggetto con un altro.

Per verificare se un downcasting è valido o meno, è possibile eseguire
Il sistema getClass() consente agli sviluppatori di comprendere la classe dell'oggetto passato e successivamente di confrontarla con la classe corrente. Nel caso in cui non siano uguali, il downcasting non sarà valido e provare questo processo sarà inutile. Il concetto di downcasting utilizza principalmente il casting di super-tipi nei sottotipi. Tale processo di casting viene solitamente eseguito in modo esplicito. Ciò implica fondamentalmente che i tipi di dimensioni maggiori sono realizzati per adattarsi esplicitamente ai tipi di dimensioni ridotte.
Upcasting vs Downcasting
Upcasting e. Il downcasting presenta alcune differenze molto particolari. Alcuni di essi sono stati brevemente sottolineati nelle seguenti indicazioni:
- In Upcasting un oggetto figlio viene convertito in typecast in un oggetto padre. D'altra parte, il riferimento dell'oggetto della classe genitore finisce per passare alla classe figlia quando si tratta di downcasting.
- Le persone possono eseguire l'upcast sia in modo esplicito che implicito, mentre il downcasting può essere eseguito solo in modo esplicito.
- Nel caso dell'upcasting, le persone possono accedere alle variabili e ai metodi della classe genitore nella classe figlia ma non viceversa. Nel downcasting, invece, le variabili ei metodi di entrambe le classi sono facilmente accessibili.
- L'upcasting consente l'accesso solo a particolari metodi di classe figlio. Sia durante l'esecuzione del downcast, vengono resi accessibili tutti i metodi e le variabili che rientrano in entrambe le classi.
Conclusione
L'upcasting è usato raramente in Java. Nella maggior parte dei casi, le persone lo usano quando devono sviluppare un codice che si occupa solo della classe genitore. Quando si tratta di sviluppare un codice che fornisce l'accesso al comportamento della classe figlio, tende a essere utilizzato il downcasting.
Se vuoi imparare Java e ottenere una certificazione anche nel cloud computing, upGrad offre un programma di certificazione avanzato in Cloud Computing . Il corso online di 7,5 mesi è progettato specificamente per i professionisti che lavorano per aiutarli a ottenere l'accesso ai ruoli di cloud computing.
