Polimorfizmas Java OOP su pavyzdžiu

Kas yra Java polimorfizmas?

„Java“ polimorfizmas atsiranda, kai yra viena ar daugiau paveldėjimo būdu tarpusavyje susijusių klasių ar objektų. Kitaip tariant, tai yra objekto sugebėjimas įgauti daugybę formų. Paveldėjimas leidžia vartotojams paveldėti atributus ir metodus, o polimorfizmas naudoja šiuos metodus skirtingoms užduotims atlikti. Taigi, tikslas yra bendravimas, tačiau požiūris yra kitoks.

Pavyzdžiui, turite bendravimui skirtą išmanųjį telefoną. Jūsų pasirinktas ryšio būdas gali būti bet koks. Tai gali būti skambutis, tekstinis pranešimas, grafinis pranešimas, paštas ir kt. Taigi, bendras tikslas yra bendravimas, tačiau jų požiūris skiriasi. Tai vadinama polimorfizmu.

Šioje pamokoje sužinosite

  • Kas yra polimorfizmas?
  • Java polimorfizmas OOP's su pavyzdžiu
  • Metodas svarbesnis
  • Skirtumas tarp perkrovos ir nepaisymo
  • Kas yra dinaminis polimorfizmas?
  • Super raktinis žodis
  • Skirtumas tarp statinio ir dinaminio polimorfizmo

Spustelėkite čia, jei vaizdo įrašas nepasiekiamas

Java polimorfizmas OOP's su pavyzdžiu

Mes turime vieną tėvų klasę „Sąskaita“, turinti indėlių ir pinigų atsiėmimo funkciją. Sąskaitoje yra 2 vaikų klasės . Įmokų ir lėšų atsiėmimas yra tas pats, kaip taupyti ir tikrinti sąskaitas. Taigi paveldėti metodai iš „Account“ klasės veiks.

Programinės įrangos reikalavimo pasikeitimas

Reikalavimų specifikacijoje pasikeitė kažkas, kas taip įprasta programinės įrangos pramonėje. Jūs turėtumėte pridėti privilegijuotą funkcinę banko sąskaitą su overdrafto galimybe.

Kalbant apie foną, overdraftas yra priemonė, kuria galite atsiimti didesnę sumą, nei yra jūsų sąskaitos likutis.

Taigi, atsisakykite privilegijuotų poreikių metodo, kuris bus įgyvendintas iš naujo. Bet jūs nepakeisite patikrinto kodo kaupimo ir tikrinimo sąskaitoje. Tai yra OOPS pranašumas

1 žingsnis) Kai vadinamasis „atsiimtas“ sąskaitos taupymo metodas yra vadinamas, vykdomas metodas iš pirminės sąskaitos klasės.

2 žingsnis) Tačiau kai atliekamas privilegijuotos sąskaitos (overdrafto galimybės) metodas „Išimti“, yra vykdomas privilegijuotoje klasėje apibrėžtas atsiėmimo metodas. Tai yra polimorfizmas.

Metodas svarbesnis

Metodo nepaisymas yra superklasės metodo iš naujo apibrėžimas pogrupyje.

Metodo nepaisymo taisyklės

  • Metodo parašas, ty metodo pavadinimas, parametrų sąrašas ir grąžinimo tipas turi tiksliai sutapti.
  • Nepaisomas metodas gali išplėsti prieinamumą, bet jo nesusiaurinti, ty jei jis yra privatus pagrindinėje klasėje, vaikų klasė gali jį paviešinti, bet ne atvirkščiai.

Pavyzdys

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

Skirtumas tarp perkrovos ir nepaisymo

Metodas Perkrovimas Metodas svarbesnis

Metodo perkrova yra toje pačioje klasėje, kur daugiau nei vienas metodas turi tą patį pavadinimą, bet skirtingus parašus.

Metodo viršenybė yra tada, kai vienas iš super klasės metodų yra iš naujo apibrėžtas pogrupyje. Šiuo atveju metodo parašas lieka tas pats.

Pvz .:

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

Pvz .:

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

Kas yra dinaminis polimorfizmas?

Dinaminis polimorfizmas yra mechanizmas, pagal kurį galima apibrėžti kelis metodus tuo pačiu pavadinimu ir parašu superklasėje ir poklasyje. Kvietimas nepaisyti metodo išsprendžiamas vykdymo metu.

Dinaminio polimorfizmo pavyzdys:

„Super“ klasės kintamasis gali reikšti pogrupio objektą

Doctor obj = new Surgeon();

Apsvarstykite teiginį

obj.treatPatient();

Čia pamatinis kintamasis „obj“ yra tėvų klasės, tačiau objektas, į kurį jis nukreipia, yra vaikų klasės (kaip parodyta diagramoje).


obj.treatPatient () vykdys pogrupio „chirurgas“ („chirurgas“) metodą

Jei metodo iškvietimui naudojama pagrindinės klasės nuoroda, metodą, kurį reikia naudoti, nusprendžia JVM, priklausomai nuo objekto, į kurį nukreipiama nuoroda

Pvz., Nors obj yra nuoroda į gydytoją, jis vadina chirurgo metodą, nes nurodo į chirurgo objektą

Tai nusprendžiama vykdymo metu ir todėl vadinama dinaminiu arba vykdymo laiko polimorfizmu

Super raktinis žodis

Ką daryti, jei chirurgo klasės „treatPatient“ metodas nori atlikti „Doctor“ klasėje apibrėžtą funkcionalumą ir tada atlikti savo specifinę funkciją?
Šiuo atveju raktinis žodis

supergali būti naudojamas norint pasiekti tėvų klasės metodus iš vaikų klasės.
„Chirurgo“ klasės „treatPatient“ metodą galima parašyti taip:
treatPatient(){super.treatPatient();//add code specific to Surgeon}

Raktinis žodis super gali būti naudojamas norint pasiekti bet kurį super klasės klasės narį ar metodus.Pavyzdys: - Norėdami sužinoti paveldėjimą, polimorfizmą ir svarbiausią raktinį žodį

1 žingsnis. Nukopijuokite šį kodą į redaktorių

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 žingsnis) Išsaugokite, kompiliuokite ir paleiskite kodą. Stebėkite išvestį.
3 žingsnis) Atšaukite eilutes Nr. 6–9. Išsaugokite, kompiliuokite ir paleiskite kodą. Stebėkite išvestį.
4 žingsnis) Nekomentuokite 10 eilutės. Išsaugoti ir sudaryti kodą.
5 žingsnis) Klaida =? Taip yra todėl, kad pogrupis negali pasiekti privačių superklasės narių.

Skirtumas tarp statinio ir dinaminio polimorfizmo

Statinis polimorfizmas Dinaminis polimorfizmas
Tai susiję su metodo perkrova. Tai susiję su metodo viršenybe.

Klaidos, jei tokių yra, pašalinamos kompiliavimo metu. Kadangi kompiliuojant kodas nevykdomas, todėl pavadinimas yra statinis.

Pvz .:

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

Tuo atveju, kai etaloninis kintamasis kviečia nepaisomą metodą, metodą, kurį reikia naudoti, nustato objektas, į kurį rodo jūsų kintamasis. Tai galima nustatyti tik vykdymo metu, kai vykdomas kodas, taigi ir pavadinimas dinamiškas.

Pvz .:

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

Įdomios straipsniai...