logo

Upcasting vs Downcasting v Javi

Pretvorba tipov je eden najpomembnejših konceptov, ki se v bistvu implicitno ali eksplicitno ukvarja s pretvorbo enega podatkovnega tipa v drugega podatkovnega tipa. V tem članku je obravnavan koncept pretvorbe tipov za objekte.
Tako kot podatkovne tipe je tudi objekte mogoče tipizirati. Vendar pa sta v objektih samo dve vrsti objektov, to sta nadrejeni objekt in podrejeni objekt. Zato pretvorba tipov objektov v bistvu pomeni, da en tip predmeta (tj.) podrejeni ali starševski predmet drugemu. Obstajata dve vrsti tipiziranja. To so:

    Upcasting: Upcasting je tipska pretvorba podrejenega predmeta v nadrejeni objekt . Pretvorba navzgor se lahko izvede implicitno. Upcasting nam daje prilagodljivost za dostop do članov nadrejenega razreda, vendar s to funkcijo ni mogoče dostopati do vseh podrejenih članov razreda. Namesto vseh članov lahko dostopamo do nekaterih določenih članov podrejenega razreda. Na primer, lahko dostopamo do preglasenih metod. Downcasting: Podobno downcasting pomeni tipsko pretvorbo a nadrejeni objekt na podrejeni objekt . Znižanje ne more biti implicitno.

Naslednja slika ponazarja koncept upcastinga in downcastinga:

Upcasting-Vs-Downcasting



niz kot niz

primer: Naj bo starševski razred. Otrok enega starša je lahko veliko. Upoštevajmo enega od otrok. Otrok podeduje lastnosti starša. Zato obstaja odnos med otrokom in staršem. Zato je otrok lahko implicitno upcasted do starša. Vendar lahko starš podeduje otrokove lastnosti ali pa ne. Vendar pa lahko na silo vržemo starša otroku, kar je znano kot navzdol . Ko izrecno definiramo to vrsto ulitja, prevajalnik v ozadju preveri, ali je ta vrsta ulitja možna ali ne. Če to ni mogoče, prevajalnik vrže izjemo ClassCastException.
Razumejmo naslednjo kodo, da razumemo razliko:

Java


niz nizov v jeziku c



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

>

>

Izhod

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

Ilustrativna slika zgornjega programa:

Upcasting-Vs-Downcasting1

Iz zgornjega primera lahko opazimo naslednje točke:

moj flixer
    Sintaksa upcastinga:
Parent p = new Child();>
  1. Pretvorba navzgor bo izvedena interno in zaradi pretvorbe navzgor je predmetu dovoljen dostop samo do članov nadrejenega razreda in določenih članov podrejenega razreda (preglasene metode itd.), vendar ne do vseh članov.
// This variable is not // accessible p.id = 1;>
    Sintaksa nizanja:
Child c = (Child)p;>
  1. Znižanje je treba izvesti zunaj in zaradi znižanja lahko podrejeni objekt pridobi lastnosti nadrejenega objekta.
c.name = p.name; i.e., c.name = 'techcodeview.com'>