Upcasting vs Downcasting v Javě

Upcasting vs Downcasting v Javě

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:

Upcasting-Vs-Downcasting



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




// 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

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

Ilustrativní obrázek výše uvedeného programu:

Upcasting-Vs-Downcasting1

Z výše uvedeného příkladu můžeme pozorovat následující body:

    Syntaxe Upcasting:
Parent p = new Child(); 
  1. 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; 
  1. 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' 


Nejlepší Články

Kategorie

Zajímavé Články