Polimorfizmus Java OOP-kban példával

Tartalomjegyzék:

Anonim

Mi a polimorfizmus a Java-ban?

A Java polimorfizmusa akkor fordul elő, ha egy vagy több osztály vagy objektum kapcsolódik egymáshoz öröklés útján. Más szavakkal, ez egy objektum azon képessége, hogy sokféle formát öltsön. Az öröklés lehetővé teszi a felhasználók számára az attribútumok és módszerek öröklését, a polimorfizmus pedig ezeket a módszereket használja a különböző feladatok elvégzéséhez. Tehát a cél a kommunikáció, de a megközelítés más.

Például van egy okostelefon a kommunikációhoz. A választott kommunikációs mód bármi lehet. Ez lehet hívás, szöveges üzenet, képes üzenet, e-mail stb. Tehát a cél közös, vagyis a kommunikáció, de más a megközelítésük. Ezt hívják polimorfizmusnak.

Ebben az oktatóanyagban megtanulja-

  • Mi a polimorfizmus?
  • Java polimorfizmus az OOP-kban, példával
  • Módszer felülírása
  • Különbség a túlterhelés és az felülbírálás között
  • Mi a dinamikus polimorfizmus?
  • Szuper kulcsszó
  • Különbség a statikus és a dinamikus polimorfizmus között

Kattintson ide, ha a videó nem érhető el

Java polimorfizmus az OOP-kban, példával

Egy szülői osztályunk van, a „Számla”, a befizetés és a felvétel funkcióval. A számlának 2 gyermekosztálya van. A számlák mentése és ellenőrzése esetén a be- és kifizetés művelete megegyezik. Tehát a Számla osztályból származó örökölt módszerek működni fognak.

A szoftverkövetelmény változása

Változás van a követelményspecifikációban, ami olyan gyakori a szoftveriparban. Önnek feltételezhetően hozzá kell adnia a funkcionalitáshoz tartozó privát bankszámlát a folyószámlahitel eszközzel.

Háttérként a folyószámlahitel egy olyan eszköz, ahol a számlán rendelkezésre álló egyenlegnél nagyobb összeget vehet fel.

Tehát vonja vissza a módszert a kiváltságos igények újrakezdéséhez. De a tesztelt kódrészletet nem változtatja meg a megtakarítási és folyószámla fiókban. Ez az OOPS előnye

1. lépés) Olyan, hogy amikor a "visszavont" módszert számlák mentésére hívják, akkor egy szülőszámla-metódust hajtanak végre.

2. lépés) De amikor a privilegizált számla (folyószámlahitel) "Visszavonás" metódusát hívják, a kiváltságos osztályban definiált visszavonási módszer kerül végrehajtásra. Ez a polimorfizmus.

Módszer felülírása

A módszer felülbírálása egy szuper osztályos módszer újradefiniálása egy alosztályban.

A módszer felülírásának szabályai

  • A metódus aláírásának, azaz a metódus nevének, a paraméterlistának és a visszatérési típusnak pontosan meg kell egyeznie.
  • A felülbírált módszer kiszélesítheti az akadálymentességet, de nem szűkítheti, azaz ha az alaposztályban magánjellegű, akkor a gyermekosztály nyilvánosságra hozhatja, de nem fordítva.

Példa

class Doctor{public void treatPatient(){// treatPatient method}class Surgeon extends Doctor{public void treatPatient(){// treatPatient method}}Class run{public static void main (String args[]){Doctor doctorObj = new Doctor()// treatPatient method in class Doctor will be executeddoctorObj.treatPatient();Surgeon surgeonObj = new Surgeon();// treatPatient method in class Surgeon will be executedsurgeonObj.treatPatient();}}

Különbség a túlterhelés és az felülbírálás között

Módszer Túlterhelés Módszer felülírása

A módszer túlterhelése ugyanabba az osztályba tartozik, ahol több módszer is ugyanazzal a névvel rendelkezik, de különböző aláírásokkal rendelkezik.

A módszer felülbírálása az, amikor a szuperosztály egyik módszerét újradefiniálják az alosztályban. Ebben az esetben a módszer aláírása ugyanaz marad.

Volt:

void sum (int a , int b);void sum (int a , int b, int c);void sum (float a, double b);

Volt:

class X{public int sum(){// some code}}class Y extends X{public int sum(){//overridden method//signature is same}}

Mi a dinamikus polimorfizmus?

A dinamikus polimorfizmus az a mechanizmus, amellyel több módszer azonos névvel és aláírással definiálható a szuperosztályban és az alosztályban. A felülbírált metódus hívása futás közben megoldódik.

Dinamikus polimorfizmus példa:

A szuper osztály referencia változója utalhat egy alosztály objektumra

Doctor obj = new Surgeon();

Tekintsük az állítást

obj.treatPatient();

Itt az "obj" referenciaváltozó a szülő osztályé, de az objektum, amelyre mutat, a gyermek osztályé (ahogy azt a diagram is mutatja).


Az obj.treatPatient () végrehajtja az alosztály kezelőPatient () metódusát - Surgeon

Ha egy metódus meghívására egy alaposztály referenciát használnak, akkor a meghívandó metódust a JVM határozza meg, attól függően, hogy mely objektumra hivatkozik a hivatkozás

Például, bár az obj hivatkozás a doktorra, a Surgeon metódust hívja meg, mivel egy Surgeon objektumra mutat

Ez a futás ideje alatt dől el, ezért dinamikus vagy futásidejű polimorfizmusnak nevezik

Szuper kulcsszó

Mi van akkor, ha a Surgeon osztályban a treatPatient metódus szeretné végrehajtani a Doctor osztályban meghatározott funkcionalitást, majd elvégezni a saját specifikus funkcióit?
Ebben az esetben kulcsszó

superfelhasználható a szülő osztály módszereinek eléréséhez a gyermek osztályból.
A treatPatient metódust a Surgeon osztályban a következőképpen lehet írni:
treatPatient(){super.treatPatient();//add code specific to Surgeon}

A super kulcsszóval az alosztály szuper osztályának bármely tagjához vagy módszereihez lehet hozzáférni.Példa: -Az öröklés, a polimorfizmus és a szuper kulcsszó elsajátításához

1. lépés: Másolja a következő kódot egy szerkesztőbe

public class Test{public static void main(String args[]){X x= new X();Y y = new Y();y.m2();//x.m1();//y.m1();//x = y;// parent pointing to object of child//x.m1() ;//y.a=10;}}class X{private int a;int b;public void m1(){System.out.println("This is method m1 of class X");}}class Y extends X{int c; // new instance variable of class Ypublic void m1(){// overriden methodSystem.out.println("This is method m1 of class Y");}public void m2(){super.m1();System.out.println("This is method m2 of class Y");}}

2. lépés: Mentse, fordítsa le és futtassa a kódot. Figyelje a kimenetet.
3. lépés: Kommentálja a 6-9. Sort. Mentse, fordítsa le és futtassa a kódot. Figyelje a kimenetet.
4. lépés: Kommentelés # 10 sor. Mentse és fordítsa le a kódot.
5. lépés) Hiba =? Ennek oka, hogy az alosztály nem férhet hozzá a szuper osztály privát tagjaihoz.

Különbség a statikus és a dinamikus polimorfizmus között

Statikus polimorfizmus Dinamikus polimorfizmus
A módszer túlterhelésére vonatkozik. A módszer felülírására vonatkozik.

Az esetleges hibákat a fordításkor oldják meg. Mivel a kód nem kerül végrehajtásra a fordítás során, ezért a név statikus.

Volt:

void sum (int a , int b);void sum (float a, double b);int sum (int a, int b); //compiler gives error.

Abban az esetben, ha egy referencia változó felülbírált metódust hív, a meghívandó metódust az objektum határozza meg, a referencia változó pedig erre mutat. Ezt csak futás közben lehet meghatározni, amikor a kód végrehajtás alatt van, ezért a név dinamikus.

Volt:

//reference of parent pointing to child objectDoctor obj = new Surgeon();// method of child calledobj.treatPatient();