Bevezetés a futásidejű polimorfizmusba a Java-ban
Ebben a cikkben megismerjük a futásidejű polimorfizmust a Java-ban. A „Poly” jelentése „sok”, a „morph” pedig „type”. Tehát a polimorfizmus kifejezés ugyanazt a dolgot jelöli a különféle típusoknál. Itt megtudhatja, hogy a Java hogyan archiválja a polimorfizmust futási idő alatt, ami azt jelenti, hogy az összeállítás után, de a kód futtatása előtt.
Szintaxis:
A Java futásiidejű polimorfizmusához a java alapvető szintaxisát és a kommentárokat kell követnie. @Override
kommentár itt felhasználható annak kifejezésére, hogy melyik módszert szeretnénk felülbírálni.
Hogyan működik a futásidejű polimorfizmus a Java-ban?
A futásidejű polimorfizmus Javaban működik felülíró módszerrel. A metódus felülírása akkor fordul elő, amikor az objektumok ugyanazzal a metódusnévvel, argumentumokkal és típussal rendelkeznek, mint a szülő osztályban, de eltérő funkcionalitással. Ha egy gyermekosztályban van ilyen típusú módszer, akkor ezt felülbírált módszernek nevezzük.
Miért nevezik futásidejű polimorfizmusnak?
amikor a gyermek osztály felülbírált módszerét hívjuk szülőtípus-referencián keresztül (ezt a jelenséget a java-ban „Upcasting” -nak nevezzük), akkor az objektum típusa jelzi, hogy melyik módszert vagy funkcionalitást fogja meghívni. Ennek a döntésnek a meghozatalát követően a JVM a kód összeállítása után történik. Ezért futási idő polimorfizmusnak hívják.
Ezt dinamikus módszer továbbításnak is nevezik. Az okot úgy nevezték el, hogy a módszer működését dinamikusan dönti el a futásidő az objektumonként a JVM által
A késői kötésnek is nevezik, mert a módszer és az objektum kötésére, amely azt jelenti, hogy melyik objektum módszere jelenik meg, későn, azaz az összeállítás után döntenek.
Szabályok és korlátozások a Runtim e polimorfizmusban
Az alábbiakban bemutatjuk a futásidejű polimorfizmus néhány szabályát és korlátozását:
A futásidejű polimorfizmus szabályai
- A gyermek- és a szülőosztály módszereinek azonos névvel kell rendelkezniük.
- A gyermek- és a szülőosztály módszereinek azonos paraméterrel kell rendelkezni.
- IS-A kapcsolat kötelező (öröklés).
A futásidejű polimorfizmus korlátozásai
- Nem lehet felülírni a szülői osztály magánmódszereit.
- A végleges módszereket nem szabad felülírni.
- A statikus módszereket nem szabad felülírni.
Példák a futásidejű polimorfizmusra a Java-ban
Itt tárgyalunk néhány futóidejű polimorfizmus kódpéldáját.
1. példa
Ebben a példában megmutatjuk, hogyan jeleníti meg a metódus () a különféle üzeneteket attól függően, hogy milyen típusú objektumhoz van társítva. Ha a „Szülők” típushoz van társítva, akkor a szülői osztály üzeneteit jeleníti meg. Míg a „Gyerekek” típushoz társítva, akkor az üzeneteket jeleníti meg a gyermekosztályból.
Kód:
class Parents (
public void showcase () (
System.out.println("I am Parent");
)
)
class Children extends Parents (
@Override
public void showcase () (
System.out.println("I am Children");
)
)
public class RunTimePolymorphism (
public static void main(String args()) (
Parents superObject = new Parents();
superObject.showcase(); //method of super class or parent class is called
Parents subObject = new Children(); // upcasting
subObject.showcase();//method of sub class or child class is called by Parent reference, this is called "Run time Polymorphism"
Children subObject2 = new Children();
subObject2.showcase(); //method of sub class or child class is called
)
)
Kimenet:
2. példa
Vegyünk példát a futási idő polimorfizmusára többszintű öröklés esetén. Ebben a példában az öröklés két szintjét vettük figyelembe. Ebben a példában megmutatjuk, hogy a sip () módszer hogyan jeleníti meg a különböző üzeneteket, attól függően, hogy melyik objektumtípushoz van társítva. Ha az „Emberi” típushoz van társítva, akkor egy szülőosztály üzeneteit jeleníti meg. Míg amikor az „Ember” típushoz van társítva, akkor a gyermekkori üzeneteit jeleníti meg. Az öröklés második szintjén, amikor hozzákapcsolódik a „baba” típushoz, ismét szülők gyermekosztályának üzeneteit mutatja, amely „ember” osztályba tartozik.
Kód:
class Human(
void sip() (
System.out.println("Human is sipping");
)
)
class Man extends Human(
void sip()(
System.out.println("Man is sipping soup");
)
)
class Baby extends Man(
void sip()(
System.out.println("Baby is sipping milk");
)
)
public class RunTimePolymorphism (
public static void main(String args())(
Human superObject=new Human();
Human subObject=new Man(); // // upcasting : first level of heritance
Human babyObject=new Baby(); // // upcasting : second level of heritance
superObject.sip();
subObject.sip(); //run time polymorphism happening in first level of heritance
babyObject.sip(); //run time polymorphism happening in second level of heritance
)
)
Kimenet:
3. példa
Vegyünk egy újabb példát a futási idő polimorfizmusáról többszintű öröklés esetén. Ebben a példában az öröklés három szintjét vesszük figyelembe. Ebben a példában megmutatjuk, hogy a metódus funkció () hogyan mutat különféle funkciókat attól függően, hogy melyik objektumtípushoz van társítva. Ha az „operációs rendszer” típushoz van társítva, akkor egy szülőosztály üzeneteit jeleníti meg. Míg amikor a „DOS” típushoz van társítva, akkor a gyermekkori üzeneteit jeleníti meg. Az öröklés második szintjén ismét, amikor a „Windows” típushoz van társítva, üzeneteket mutat a szülő gyermekosztályából, amely „DOS” osztály. Az öröklés harmadik szintjén, amikor a „WindowsMobile” típushoz van társítva, üzeneteket mutat a szülő gyermekosztályából, amely a „Windows” osztály.
Kód:
class OperatingSytem(
void feature() (
System.out.println("This is Operating Sytem");
)
)
class DOS extends OperatingSytem(
void feature()(
System.out.println("This is DOS");
)
)
class Windows extends DOS(
void feature()(
System.out.println("This is Windows");
)
)
class WindowsMobile extends Windows(
void feature()(
System.out.println("This is Windows Mobile");
)
)
public class RunTimePolymorphism (
public static void main(String args())(
OperatingSytem superObject=new OperatingSytem();
OperatingSytem subObject=new DOS(); // child object type : first level of heritance
OperatingSytem sub2Object=new Windows(); // child object type : second level of heritance
OperatingSytem sub3Object=new WindowsMobile(); // child object type : third level of heritance
superObject.feature();
subObject.feature(); //run time polymorphism happening in first level of heritance
sub2Object.feature(); //run time polymorphism happening in second level of heritance
sub3Object.feature(); //run time polymorphism happening in third level of heritance
)
)
Kimenet:
Következtetés
Ez befejezi a „Futásidejű polimorfizmus Java-ban” című tanulásunk befejezését. Írja be a fenti példákban említett kódokat a java fordítóba, és ellenőrizze a kimenetet. A kódok elsajátítása hiányos, ha nem írja be a kódot egyedül.
Ajánlott cikkek
Ez egy útmutató a Java futásidejű polimorfizmusához. Itt a példákkal tárgyaljuk, hogyan működik a futásidejű polimorfizmus java-ban. Lehet, hogy megnézi a következő cikkeket is, ha többet szeretne megtudni -
- Statikus kulcsszó a Java-ban
- A Java alapon érvényes
- Mi az a polimorfizmus?
- Rozsda vs Golang