logo

Upcasting vs downcasting i Java

Typecasting är ett av de viktigaste begreppen som i grunden handlar om konvertering av en datatyp till en annan datatyp implicit eller explicit. I den här artikeln diskuteras begreppet typcasting för objekt.
Precis som datatyperna kan objekten också typcastas. Men i objekt finns det bara två typer av objekt, det vill säga överordnat objekt och underordnat objekt. Därför innebär typcasting av objekt i grunden att en typ av objekt (dvs.) barn eller förälder till en annan. Det finns två typer av typgjutning. Dom är:

    Upcasting: Upcasting är typcasting av ett underordnat objekt till ett överordnat objekt . Uppsändning kan göras implicit. Uppsändning ger oss flexibiliteten att komma åt de överordnade klassmedlemmarna men det är inte möjligt att komma åt alla underordnade klassmedlemmar med den här funktionen. Istället för alla medlemmar kan vi komma åt vissa angivna medlemmar i barnklassen. Till exempel kan vi komma åt de åsidosatta metoderna. Downcasting: På samma sätt betyder downcasting typcasting av en överordnat objekt till ett underordnat objekt . Nedkastning kan inte vara implicit.

Följande bild illustrerar konceptet med upp- och nedkastning:

Uppsändning-Vs-nedsändning



Exempel: Låt det bli en föräldraklass. Det kan finnas många barn till en förälder. Låt oss ta ett av barnen i beaktande. Barnet ärver förälderns egenskaper. Därför finns det en är-en relation mellan barnet och föräldern. Därför kan barnet vara implicit upprörd till föräldern. Men en förälder kan eller kanske inte ärver barnets egenskaper. Däremot kan vi tvinga en förälder till ett barn som kallas nedslående . Efter att vi definierat denna typ av casting uttryckligen, kontrollerar kompilatorn i bakgrunden om denna typ av casting är möjlig eller inte. Om det inte är möjligt, kastar kompilatorn en ClassCastException .
Låt oss förstå följande kod för att förstå skillnaden:

Java


sträng till heltal java



// 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(); ->kompileringstidsfel> >// Downcasting Explicitly> >Child c = (Child)p;> >c.id =>1>;> >System.out.println(c.name);> >System.out.println(c.id);> >c.method();> >}> }>

>

>

Produktion

heltal till dubbel java
techcodeview.com Method from Child techcodeview.com 1 Method from Child>

En illustrativ figur av programmet ovan:

Uppsändning-Vs-nedsändning1

Från exemplet ovan kan vi observera följande punkter:

    Syntax för uppsändning:
Parent p = new Child();>
  1. Uppsändning kommer att göras internt och på grund av uppsändning tillåts objektet endast åtkomst till överordnade klassmedlemmar och underordnade klassmedlemmar (åsidosatta metoder, etc.) men inte alla medlemmar.
// This variable is not // accessible p.id = 1;>
    Syntax för nedkastning:
Child c = (Child)p;>
  1. Nedsändning måste göras externt och på grund av nedsändning kan ett underordnat objekt förvärva egenskaperna hos det överordnade objektet.
c.name = p.name; i.e., c.name = 'techcodeview.com'>