Polymorfizmus v OOP Java s príkladom

Obsah:

Anonim

Čo je to polymorfizmus v Jave?

Polymorfizmus v Jave nastáva, keď existuje jedna alebo viac tried alebo objektov navzájom súvisiacich dedením. Inými slovami, ide o schopnosť objektu mať mnoho podôb. Dedenie umožňuje používateľom dediť atribúty a metódy a polymorfizmus používa tieto metódy na vykonávanie rôznych úloh. Cieľom je teda komunikácia, ale prístup je iný.

Napríklad máte smartphone na komunikáciu. Komunikačný režim, ktorý si vyberiete, môže byť čokoľvek. Môže to byť hovor, textová správa, obrazová správa, pošta atď. Spoločný cieľ je teda komunikácia, ale ich prístup je odlišný. Toto sa nazýva polymorfizmus.

V tomto návode sa naučíte

  • Čo je to polymorfizmus?
  • Polymorfizmus Java v OOP s príkladom
  • Prepísanie metódy
  • Rozdiel medzi preťažením a prepísaním
  • Čo je to dynamický polymorfizmus?
  • Super kľúčové slovo
  • Rozdiel medzi statickým a dynamickým polymorfizmom

Ak video nie je prístupné, kliknite sem

Polymorfizmus Java v OOP s príkladom

Máme jednu nadradenú triedu „Účet“ s funkciou vkladu a výberu. Účet má dve podradené triedy . Vklad a výber sú rovnaké pre ukladanie a kontrolu účtov. Takže zdedené metódy z triedy Account budú fungovať.

Zmena v softvérových požiadavkách

V špecifikácii požiadaviek došlo k zmene, čo je v softvérovom priemysle také bežné. Mali by ste pridať funkcionalitu privilegovaného bankového účtu k prečerpaniu.

Prečerpanie je na pozadí možnosti, pri ktorej si môžete vybrať viac, ako je k dispozícii zostatok na vašom účte.

Takže, zrušiť metódu pre privilegované potreby implementovať znova. Testovaný kód však nezmeníte v účte Sporenie a kontrola. To je výhoda OOPS

Krok 1) Taký, že keď sa nazýva „stiahnutá“ metóda ukladania účtu, vykoná sa metóda z triedy nadradeného účtu.

Krok 2) Ale keď sa nazýva metóda „Výber“ pre privilegovaný účet (možnosť prečerpania), vykoná sa metóda výberu uvedená v privilegovanej triede. Toto je polymorfizmus.

Prepísanie metódy

Metóda Overriding predefinuje metódu super triedy v podtriede.

Pravidlá pre prepísanie metódy

  • Podpis metódy, tj. Názov metódy, zoznam parametrov a návratový typ sa musia presne zhodovať.
  • Prepísaná metóda môže prístupnosť rozšíriť, ale nie zúžiť, tj ak je v základnej triede súkromná, potom ju podradená trieda môže zverejniť, ale nie naopak.

Príklad

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();}}

Rozdiel medzi preťažením a prepísaním

Metóda preťaženia Prepísanie metódy

Preťaženie metódy je v rovnakej triede, kde viac ako jedna metóda má rovnaký názov, ale rôzne podpisy.

Prepísanie metódy je, keď je v podtriede predefinovaná jedna z metód v super triede. V takom prípade podpis metódy zostáva rovnaký.

Príklad:

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

Príklad:

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

Čo je to dynamický polymorfizmus?

Dynamický polymorfizmus je mechanizmus, pomocou ktorého je možné definovať viac metód s rovnakým menom a podpisom v nadtriede a podtriede. Volanie prepísanej metódy sa vyrieši za behu programu.

Príklad dynamického polymorfizmu:

Referenčná premenná super triedy môže odkazovať na objekt podtriedy

Doctor obj = new Surgeon();

Zvážte vyhlásenie

obj.treatPatient();

Referenčná premenná „obj“ je tu z nadradenej triedy, ale objekt, na ktorý ukazuje, je z podradenej triedy (ako je znázornené na diagrame).


obj.treatPatient () vykoná metódu treatPatient () podtriedy - chirurg

Ak sa na volanie metódy použije odkaz na základnú triedu, o metóde, ktorú sa má vyvolať, rozhodne JVM, v závislosti od objektu, na ktorý odkaz odkazuje

Napríklad aj keď je obj odkaz na Doktora, volá metódu chirurga, pretože ukazuje na objekt chirurga.

O tom sa rozhoduje za behu, a preto sa nazýva dynamický alebo za chodu polymorfizmus

Super kľúčové slovo

Čo ak chce metóda treatPatient v triede Chirurg vykonať funkcie definované v triede Doktor a potom vykonať svoju vlastnú špecifickú funkčnosť?
V tomto prípade kľúčové slovo

supermožno použiť na prístup k metódam nadradenej triedy z podradenej triedy.
Metódu TreatPatient v triede Chirurg bolo možné napísať ako:
treatPatient(){super.treatPatient();//add code specific to Surgeon}

The keyword super can be used to access any data member or methods of the super class in the sub class.
Example:-To learn Inheritance, Polymorphism & super keyword

Step 1) Copy the following code into an Editor

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");}}

Step 2) Save, Compile & Run the code. Observe the output.
Step 3) Uncomments lines # 6-9. Save, Compile & Run the code. Observe the output.
Step 4) Uncomment line # 10 . Save & Compile the code.
Step 5) Error = ? This is because sub-class cannot access private members of the super class.

Difference between Static & Dynamic Polymorphism

Static Polymorphism Dynamic Polymorphism
It relates to method overloading. It relates to method overriding.

Chyby, ak existujú, sú vyriešené v čase kompilácie. Pretože sa kód počas kompilácie nevykonáva, odtiaľ pochádza aj názov statický.

Príklad:

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

V prípade, že referenčná premenná volá prepísanú metódu, spôsob, ktorý sa má vyvolať, určuje objekt, na ktorý vaša referenčná premenná ukazuje. Toto je možné určiť iba za behu, keď sa kód spúšťa, a preto je názov dynamický.

Príklad:

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