Typecasting je jedním z nejdůležitějších konceptů, který se v podstatě zabývá převodem jednoho datového typu na jiný datový typ implicitně nebo explicitně. V tomto článku je diskutován koncept typového obsazení objektů.
Stejně jako datové typy lze i objekty přetypovat. V objektech však existují pouze dva typy objektů, tj. rodičovský objekt a podřízený objekt. Přetypování objektů tedy v zásadě znamená, že jeden typ objektu (tj.) je potomkem nebo rodičem druhému. Existují dva typy přetypování. Oni jsou:
- Upcasting: Upcasting je typové obsazení z podřízeného objektu na nadřazený objekt . Upcasting lze provést implicitně. Upcasting nám poskytuje flexibilitu přístupu k členům nadřazené třídy, ale pomocí této funkce není možné získat přístup ke všem členům třídy podřízené. Namísto všech členů máme přístup k některým určeným členům podřízené třídy. Například máme přístup k přepsaným metodám. Downcasting: Podobně, downcasting znamená typové obsazení a rodičovský objekt na podřízený objekt . Downcasting nemůže být implicitní.
Následující obrázek ilustruje koncept upcastingu a downcastingu:

Příklad: Nechť existuje rodičovská třída. Dětí jednoho rodiče může být mnoho. Vezměme v úvahu jedno z dětí. Dítě zdědí vlastnosti rodiče. Existuje tedy vztah mezi dítětem a rodičem. Dítě tedy může být implicitně upcasted k rodiči. Rodič však může, ale nemusí zdědit vlastnosti dítěte. Můžeme však násilím obsadit rodiče dítěti, které je známé jako downcasting . Poté, co explicitně definujeme tento typ castingu, kompilátor na pozadí zkontroluje, zda je tento typ castingu možný nebo ne. Pokud to není možné, kompilátor vyvolá ClassCastException .
Pojďme pochopit následující kód, abychom pochopili rozdíl:
Jáva
převod int na řetězec v jazyce 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(); ->chyba času kompilace> >// Downcasting Explicitly> >Child c = (Child)p;> >c.id =>1>;> >System.out.println(c.name);> >System.out.println(c.id);> >c.method();> >}> }> |
>
>Výstup
celé číslo na řetězec v jazyce Java
techcodeview.com Method from Child techcodeview.com 1 Method from Child>
Ilustrativní obrázek výše uvedeného programu:

Z výše uvedeného příkladu můžeme pozorovat následující body:
- Syntaxe Upcasting:
Parent p = new Child();>
- Upcasting bude proveden interně a díky upcastingu má objekt povolen přístup pouze k členům nadřazené třídy a k podřízeným členům třídy (přepsané metody atd.), ale ne ke všem členům.
// This variable is not // accessible p.id = 1;>
- Syntaxe downcastingu:
Child c = (Child)p;>
- Downcasting musí být proveden externě a díky downcastingu může podřízený objekt získat vlastnosti nadřazeného objektu.
c.name = p.name; i.e., c.name = 'techcodeview.com'>