logo

Upcasting vs downcasting i Java

Typecasting er et av de viktigste konseptene som i utgangspunktet omhandler konvertering av en datatype til en annen datatype implisitt eller eksplisitt. I denne artikkelen diskuteres begrepet typecasting for objekter.
Akkurat som datatypene kan objektene også typecastes. Men i objekter er det bare to typer objekter, det vil si overordnet objekt og underordnet objekt. Derfor betyr typecasting av objekter i utgangspunktet at en type objekt (dvs.) barn eller forelder til en annen. Det finnes to typer typecasting. De er:

    Upcasting: Upcasting er typecasting av et underordnet objekt til et overordnet objekt . Upcasting kan gjøres implisitt. Upcasting gir oss fleksibiliteten til å få tilgang til de overordnede klassemedlemmene, men det er ikke mulig å få tilgang til alle barneklassemedlemmene ved å bruke denne funksjonen. I stedet for alle medlemmene kan vi få tilgang til noen spesifiserte medlemmer av barneklassen. For eksempel kan vi få tilgang til de overstyrte metodene. Nedkasting: På samme måte betyr nedkasting typekasting av en overordnet objekt til et underordnet objekt . Nedkasting kan ikke være implisitt.

Følgende bilde illustrerer konseptet med opp- og nedkasting:

Upcasting-Vs-Downcasting



Eksempel: La det være en foreldreklasse. Det kan være mange barn av en forelder. La oss ta et av barna i betraktning. Barnet arver egenskapene til forelderen. Derfor er det et er-et forhold mellom barn og forelder. Derfor kan barnet være implisitt oppgitt til forelderen. Imidlertid kan en forelder arve barnets eiendommer eller ikke. Imidlertid kan vi tvinge en forelder til et barn som er kjent som nedslående . Etter at vi har definert denne typen casting eksplisitt, sjekker kompilatoren i bakgrunnen om denne typen casting er mulig eller ikke. Hvis det ikke er mulig, kaster kompilatoren en ClassCastException .
La oss forstå følgende kode for å forstå forskjellen:

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

>

>

Produksjon

techcodeview.com Method from Child techcodeview.com 1 Method from Child>

En illustrerende figur av programmet ovenfor:

Upcasting-Vs-Downcasting1

Fra eksemplet ovenfor kan vi observere følgende punkter:

    Syntaks for oppkasting:
Parent p = new Child();>
  1. Upcasting vil bli gjort internt og på grunn av upcasting har objektet kun tilgang til overordnede klassemedlemmer og barneklassespesifiserte medlemmer (overstyrte metoder osv.), men ikke alle medlemmer.
// This variable is not // accessible p.id = 1;>
    Syntaks for nedkasting:
Child c = (Child)p;>
  1. Nedkasting må gjøres eksternt og på grunn av nedkasting kan et underordnet objekt få egenskapene til det overordnede objektet.
c.name = p.name; i.e., c.name = 'techcodeview.com'>