Typecasting er et af de vigtigste begreber, som grundlæggende beskæftiger sig med konvertering af en datatype til en anden datatype implicit eller eksplicit. I denne artikel diskuteres begrebet typecasting for objekter.
Ligesom datatyperne kan objekterne også typecastes. Men i objekter er der kun to typer objekter, nemlig overordnet objekt og underordnet objekt. Derfor betyder typecasting af objekter grundlæggende, at en type objekt (dvs.) barn eller forælder til en anden. Der er to typer typecasting. De er:
- Upcasting: Upcasting er typecasting af et underordnet objekt til et overordnet objekt . Upcasting kan udføres implicit. Upcasting giver os fleksibiliteten til at få adgang til de overordnede klassemedlemmer, men det er ikke muligt at få adgang til alle de underordnede klassemedlemmer ved hjælp af denne funktion. I stedet for alle medlemmerne kan vi få adgang til nogle angivne medlemmer af børneklassen. For eksempel kan vi få adgang til de tilsidesatte metoder. Downcasting: På samme måde betyder downcasting typecasting af en overordnet objekt til et underordnet objekt . Nedkastning kan ikke være implicit.
Følgende billede illustrerer begrebet upcasting og downcasting:

Eksempel: Lad der være en forældreklasse. Der kan være mange børn af en forælder. Lad os tage et af børnene i betragtning. Barnet arver forælderens egenskaber. Derfor er der et er-et forhold mellem barn og forælder. Derfor kan barnet være implicit opstemt til forælderen. En forælder kan dog arve barnets ejendomme. Vi kan dog tvinge en forælder til et barn, der er kendt som nedslående . Efter at vi har defineret denne type casting eksplicit, kontrollerer compileren i baggrunden, om denne type casting er mulig eller ej. Hvis det ikke er muligt, kaster compileren en ClassCastException.
Lad os forstå følgende kode for at forstå forskellen:
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(); ->kompileringstidsfejl> >// Downcasting Explicitly> >Child c = (Child)p;> >c.id =>1>;> >System.out.println(c.name);> >System.out.println(c.id);> >c.method();> >}> }> |
>
>Produktion
techcodeview.com Method from Child techcodeview.com 1 Method from Child>
En illustrativ figur af ovenstående program:

Fra ovenstående eksempel kan vi observere følgende punkter:
- Syntaks for upcasting:
Parent p = new Child();>
- Upcasting vil blive udført internt, og på grund af upcasting får objektet kun adgang til overordnede klassemedlemmer og underordnede klasseangivne medlemmer (tilsidesatte metoder osv.), men ikke alle medlemmer.
// This variable is not // accessible p.id = 1;>
- Syntaks for downcasting:
Child c = (Child)p;>
- Downcasting skal udføres eksternt, og på grund af downcasting kan et underordnet objekt erhverve egenskaberne for det overordnede objekt.
c.name = p.name; i.e., c.name = 'techcodeview.com'>