Kas ir Java polimorfisms?
Java polimorfisms rodas, ja ir viena vai vairākas klases vai objekti, kas savstarpēji saistīti ar mantojumu. Citiem vārdiem sakot, tā ir objekta spēja iegūt dažādas formas. Mantošana ļauj lietotājiem mantot atribūtus un metodes, un polimorfisms izmanto šīs metodes dažādu uzdevumu veikšanai. Tātad mērķis ir komunikācija, bet pieeja ir atšķirīga.
Piemēram, saziņai ir viedtālrunis. Jūsu izvēlētais saziņas režīms varētu būt jebkas. Tas var būt zvans, īsziņa, grafiskā īsziņa, pasts utt. Tātad kopīgs mērķis ir saziņa, taču viņu pieeja ir atšķirīga. To sauc par polimorfismu.
Šajā apmācībā jūs uzzināsiet
- Kas ir polimorfisms?
- Java polimorfisms OOP's ar piemēru
- Metodes ignorēšana
- Starpība starp pārslodzi un nepārsniegšanu
- Kas ir dinamiskais polimorfisms?
- Super atslēgvārds
- Atšķirība starp statisko un dinamisko polimorfismu
Noklikšķiniet šeit, ja videoklips nav pieejams
Java polimorfisms OOP's ar piemēru
Mums ir viena vecāku klase “Konts” ar depozīta un izņemšanas funkciju. Kontā ir 2 bērnu klases . Iemaksas un izņemšanas darbība ir vienāda kontu glabāšanai un pārbaudei. Tātad no konta klases mantotās metodes darbosies.Izmaiņas programmatūras prasībā
Izmaiņas prasību specifikācijā ir kaut kas tik izplatīts programmatūras nozarē. Jums vajadzētu pievienot funkcionalitātes priviliģētu bankas kontu ar Overdrafta mehānismu.
Attiecībā uz iepriekšēju pārtēriņu pārtēriņš ir iespēja, kurā varat izņemt summu, kas pārsniedz jūsu kontā pieejamo atlikumu.
Tātad, atsauciet metodi priviliģētām vajadzībām, kas jāievieš no jauna. Bet jūs nemaināt pārbaudīto koda daļu krājkontā. Tā ir OOPS priekšrocība
1. solis. Tādā gadījumā, ja tiek saukta "izņemtā" metode konta saglabāšanai, tiek izpildīta metode no vecāku kontu klases.
2. solis. Bet, kad tiek saukta metode "Izņemt" priviliģēto kontu (overdrafta iespēju), tiek izpildīta privileģētajā klasē noteiktā izņemšanas metode. Tas ir polimorfisms.
Metodes ignorēšana
Metode Pārvarēšana ir superklases metodes pārdefinēšana apakšklasē.
Metodes ignorēšanas noteikumi
- Metodes parakstam, ti, metodes nosaukumam, parametru sarakstam un atgriešanas tipam ir precīzi jāatbilst.
- Pārvarētā metode var paplašināt pieejamību, bet ne sašaurināt, ti, ja tā ir privāta bāzes klasē, bērnu klase to var padarīt publisku, bet ne otrādi.
Piemērs
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();}}
Starpība starp pārslodzi un nepārsniegšanu
Metode Pārslodze | Metodes ignorēšana |
---|---|
Metodes pārslodze ir tajā pašā klasē, kur vairākām metodēm ir vienāds nosaukums, bet atšķirīgi paraksti. |
Metodes prioritāte ir tad, kad viena no superklases metodēm tiek apakšklasē pārdefinēta. Šajā gadījumā metodes paraksts paliek nemainīgs. |
Piem .: void sum (int a , int b);void sum (int a , int b, int c);void sum (float a, double b); |
Piem .: class X{public int sum(){// some code}}class Y extends X{public int sum(){//overridden method//signature is same}} |
Kas ir dinamiskais polimorfisms?
Dinamiskais polimorfisms ir mehānisms, ar kuru virsklasē un apakšklasē var definēt vairākas metodes ar vienu un to pašu nosaukumu un parakstu. Zvans uz ignorēto metodi tiek atrisināts izpildes laikā.
Dinamiskā polimorfisma piemērs:
Super klases atsauces mainīgais var atsaukties uz apakšklases objektu
Doctor obj = new Surgeon();
Apsveriet paziņojumu
obj.treatPatient();
Šeit atsauces mainīgais "obj" ir vecāku klase, bet objekts, uz kuru tas norāda, ir bērnu klase (kā parādīts diagrammā).
obj.treatPatient () izpildīs apakšklases - Treatgeon - metodi TreatPatient ()
Ja metodes izsaukšanai tiek izmantota bāzes klases atsauce, izmantojamo metodi izlemj JVM atkarībā no objekta, uz kuru norāda atsauce
Piemēram, kaut arī obj ir atsauce uz ārstu, tā izsauc ķirurga metodi, jo norāda uz ķirurga objektu
Tas tiek izlemts izpildes laikā, un tāpēc to sauc par dinamisku vai izpildes laika polimorfismu
Super atslēgvārds
Ko darīt, ja ķirurgu klases ārstētpacienta metode vēlas izpildīt ārstu klasē noteikto funkcionalitāti un pēc tam veikt savu specifisko funkcionalitāti?
Šajā gadījumā atslēgvārds
super
var izmantot, lai piekļūtu vecāku klases metodēm no bērnu klases.Ārstniecības klases ārstniecības pacienta metodi varētu rakstīt šādi:
treatPatient(){super.treatPatient();//add code specific to Surgeon}
Atslēgvārdu super var izmantot, lai piekļūtu jebkuram apakšklases superklases datu dalībniekam vai metodēm.Piemērs: -Mācīties mantojumu, polimorfismu un super atslēgvārdu
1. darbība. Nokopējiet šo kodu redaktorā
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. solis. Saglabājiet, kompilējiet un palaidiet kodu. Ievērojiet izvadi.
3. solis. Noņemiet rindas Nr. 6-9. Saglabājiet, kompilējiet un palaidiet kodu. Ievērojiet izvadi.
4. solis. Noņemiet komentāru no 10. rindas. Saglabāt un sastādīt kodu.
5. solis) Kļūda =? Tas ir tāpēc, ka apakšklase nevar piekļūt privātiem superklases dalībniekiem.
Atšķirība starp statisko un dinamisko polimorfismu
Statiskais polimorfisms | Dinamiskais polimorfisms |
---|---|
Tas attiecas uz metodes pārslodzi. | Tas attiecas uz metodes ignorēšanu. |
Kļūdas, ja tādas ir, tiek novērstas apkopošanas laikā. Tā kā kompilēšanas laikā kods netiek izpildīts, nosaukums statisks. Piem .: void sum (int a , int b);void sum (float a, double b);int sum (int a, int b); //compiler gives error. |
Gadījumā, ja atsauces mainīgais izsauc ignorētu metodi, izmantojamo metodi nosaka objekts, uz kuru norāda jūsu atsauces mainīgais. To var noteikt tikai izpildlaika laikā, kad kods tiek izpildīts, tāpēc nosaukums ir dinamisks. Piem .: //reference of parent pointing to child objectDoctor obj = new Surgeon();// method of child calledobj.treatPatient(); |