Typecasting on yksi tärkeimmistä käsitteistä, joka pohjimmiltaan käsittelee yhden tietotyypin muuntamista toiseksi tietotyypiksi implisiittisesti tai eksplisiittisesti. Tässä artikkelissa käsitellään objektien typecastingin käsitettä.
Kuten tietotyypit, myös objektit voidaan kirjoittaa tyyppilähetyksellä. Objekteissa on kuitenkin vain kahdenlaisia objekteja, eli emoobjekti ja aliobjekti. Siksi objektien typecasting tarkoittaa pohjimmiltaan sitä, että yhden tyyppinen objekti (eli) lapsi tai vanhempi toiselle. Tyyppilähetystä on kahta tyyppiä. He ovat:
- Upcasting: Upcasting on tyyppilähetys lapsiobjektista yläobjektiin . Upcasting voidaan tehdä implisiittisesti. Upcasting antaa meille joustavuuden päästä käsiksi pääluokan jäseniin, mutta kaikkia alatason jäseniä ei ole mahdollista käyttää tällä ominaisuudella. Kaikkien jäsenten sijaan voimme käyttää tiettyjä lapsiluokan jäseniä. Voimme esimerkiksi käyttää ohitettuja menetelmiä. Downcasting: Samoin downcasting tarkoittaa tyypin a vanhempi vastustaa aliobjektia . Alaslasku ei voi olla implisiittistä.
Seuraava kuva havainnollistaa upcastingin ja downcastingin käsitteitä:

e r malliesimerkkejä
Esimerkki: Olkoon vanhempien luokka. Yhdellä vanhemmalla voi olla monta lasta. Otetaan yksi lapsista huomioon. Lapsi perii vanhemman ominaisuudet. Siksi lapsen ja vanhemman välillä on suhde. Siksi lapsi voi olla implisiittisesti ylenpalttinen vanhemmalle. Vanhempi voi kuitenkin periä lapsen omaisuutta tai olla perimättä. Voimme kuitenkin väkisin heittää vanhemman lapselle, joka tunnetaan nimellä alaspäin laskeva . Kun olemme määrittäneet tämän tyyppisen valun eksplisiittisesti, kääntäjä tarkistaa taustalla, onko tällainen valu mahdollista vai ei. Jos se ei ole mahdollista, kääntäjä heittää ClassCastExceptionin.
Ymmärretään seuraava koodi eron ymmärtämiseksi:
Java
k klusterointialgoritmi
// 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(); ->käännösaikavirhe> >// Downcasting Explicitly> >Child c = (Child)p;> >c.id =>1>;> >System.out.println(c.name);> >System.out.println(c.id);> >c.method();> >}> }> |
>
>Lähtö
techcodeview.com Method from Child techcodeview.com 1 Method from Child>
Havainnollistava kuva yllä olevasta ohjelmasta:

Yllä olevasta esimerkistä voimme havaita seuraavat seikat:
minun flixerini
- Upcastingin syntaksi:
Parent p = new Child();>
- Upcasting tehdään sisäisesti ja upcastingin vuoksi objektilla on pääsy vain pääluokan jäsenille ja aliluokan määritellyille jäsenille (ohitetut menetelmät jne.), mutta ei kaikkia jäseniä.
// This variable is not // accessible p.id = 1;>
- Downcastingin syntaksi:
Child c = (Child)p;>
- Alaslähetys on suoritettava ulkoisesti ja alaslaskemisen vuoksi aliobjekti voi saada emo-objektin ominaisuudet.
c.name = p.name; i.e., c.name = 'techcodeview.com'>