Typové obsadenie je jedným z najdôležitejších konceptov, ktorý sa v podstate zaoberá konverziou jedného dátového typu na iný dátový typ implicitne alebo explicitne. V tomto článku sa diskutuje o koncepte typizácie objektov.
Rovnako ako dátové typy, aj objekty môžu byť typizované. V objektoch však existujú iba dva typy objektov, t. j. nadradený objekt a podriadený objekt. Typové obsadenie objektov teda v podstate znamená, že jeden typ objektu (t. j.) je potomkom alebo rodičom druhému. Existujú dva typy pretypovania. Oni sú:
- Upcasting: Upcasting je typové obsadenie podriadeného objektu k rodičovskému objektu . Upcasting je možné vykonať implicitne. Upcasting nám poskytuje flexibilitu prístupu k členom rodičovskej triedy, ale pomocou tejto funkcie nie je možné získať prístup ku všetkým členom triedy podriadených. Namiesto všetkých členov máme prístup k niektorým špecifikovaným členom podradenej triedy. Napríklad máme prístup k prepísaným metódam. Downcasting: Podobne, downcasting znamená pretypovanie a rodičovský objekt na podriadený objekt . Downcasting nemôže byť implicitný.
Nasledujúci obrázok ilustruje koncept upcastingu a downcastingu:

typ casting a konverzia typu v jave
Príklad: Nech je tu rodičovská trieda. Rodičov môže byť veľa detí. Zoberme si jedno z detí. Dieťa zdedí vlastnosti rodiča. Preto existuje vzťah medzi dieťaťom a rodičom. Preto môže byť dieťa implicitne upcasted rodičovi. Rodič však môže alebo nemusí zdediť vlastnosti dieťaťa. Môžeme však násilím obsadiť rodiča dieťaťu, ktoré je známe ako downcasting . Po explicitnom definovaní tohto typu castingu kompilátor na pozadí skontroluje, či je tento typ castingu možný alebo nie. Ak to nie je možné, kompilátor vyvolá ClassCastException .
Poďme pochopiť nasledujúci kód, aby sme pochopili rozdiel:
Java
porovnať s javou
// 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(); ->chyba času kompilácie> >// Downcasting Explicitly> >Child c = (Child)p;> >c.id =>1>;> >System.out.println(c.name);> >System.out.println(c.id);> >c.method();> >}> }> |
>
môj flixer
triedenie vloženia
>Výkon
techcodeview.com Method from Child techcodeview.com 1 Method from Child>
Ilustračný obrázok vyššie uvedeného programu:

Z vyššie uvedeného príkladu môžeme pozorovať nasledujúce body:
- Syntax funkcie Upcasting:
Parent p = new Child();>
- Upcasting sa bude vykonávať interne a kvôli upcastingu má objekt povolený prístup len k členom nadradenej triedy a k špecifikovaným členom podradenej triedy (prepísané metódy atď.), ale nie ku všetkým členom.
// This variable is not // accessible p.id = 1;>
- Syntax downcastingu:
Child c = (Child)p;>
- Downcasting musí byť vykonaný externe a vďaka downcastingu môže podriadený objekt získať vlastnosti nadradeného objektu.
c.name = p.name; i.e., c.name = 'techcodeview.com'>