Polümorfism sisse Java (staatiline ja dünaamiline)

Mis on polümorfism Java?

Polümorfism in Java tekib siis, kui üks või mitu klassi või objekti on üksteisega pärimise teel seotud. See on objekti võime võtta mitmesuguseid vorme. Pärimine võimaldab kasutajatel pärida atribuute ja meetodeid ning polümorfism kasutab neid meetodeid erinevate ülesannete täitmiseks. Niisiis, eesmärk on suhtlemine, kuid lähenemine on erinev.

Näiteks on teil suhtlemiseks nutitelefon. Teie valitud suhtlusviis võib olla ükskõik milline. See võib olla kõne, tekstisõnum, piltsõnum, e-post jne. Seega on eesmärk ühine, mis on suhtlemine, kuid nende lähenemine on erinev. Seda nimetatakse Polümorfism. Nüüd õpime polümorfismi Java eeskujuga.

Click siin kui video pole juurdepääsetav

Java Polümorfism OOP-des koos näitega

Meil on üks vanemklass, sissemakse ja väljamakse funktsiooniga konto. Kontol on 2 lasteklassi. Sisse- ja väljamakse toiming on kogumis- ja arvelduskontode puhul sama. Seega töötavad Konto klassi päritud meetodid.

Üksik pärand sisse Java
Java Polümorfismi näide

Tarkvaranõuete muudatus

Nõuete spetsifikatsioon on muutunud, mis on tarkvaratööstuses nii tavaline. Peate lisama arvelduskrediidi funktsiooniga privilegeeritud pangakonto. Taustaks on arvelduskrediit, mille abil saate välja võtta summa, mis on suurem kui teie konto saldo. Seega eemaldage privilegeeritud vajaduste jaoks mõeldud meetod uuesti juurutamiseks. Kuid te ei muuda kogumis- ja arvelduskontol testitud koodi. See on eelis OOPS

Java Polümorfism

Step 1) Selline, et kui kutsutakse säästukonto "välja võetud" meetod, käivitatakse emakonto klassi meetod

Java Polümorfism

Step 2) Kuid kui privilegeeritud konto (arvelduskrediidi) meetodit "Tühjendamine" nimetatakse, siis privilegeeritud klassis määratletud väljavõtmise meetod käivitatakse. See on Polümorfism OOP-des.

Java Polümorfism

Meetod alistamine sisse Java

Meetodi alistamine on superklassi meetodi ümberdefineerimine alamklassis.

Meetodi alistamise reeglid

  • Meetodi signatuur, st meetodi nimi, parameetrite loend ja tagastustüüp peavad täpselt ühtima.
  • Alistatav meetod võib juurdepääsetavust laiendada, kuid mitte kitsendada, st kui see on põhiklassis privaatne, saab alamklass selle avalikuks teha, kuid mitte vastupidi.

Meetodi alistamise reeglid Java

Näide

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 executed
    doctorObj.treatPatient();
   
    Surgeon surgeonObj = new Surgeon();
    // treatPatient  method in class Surgeon  will be executed
    surgeonObj.treatPatient();
  }
}

Erinevus ülekoormuse ja alistamise vahel

Meetod Ülekoormus
Meetodi ületamine
Meetodi ülekoormus on samas klassis, kus rohkem kui ühel meetodil on sama nimi, kuid erinevad allkirjad. Meetodi alistamine on siis, kui üks superklassi meetoditest määratletakse alamklassis uuesti. Sel juhul jääb meetodi allkiri samaks.
ex:

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

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

Mis on dünaamiline polümorfism?

OOP-ide dünaamiline polümorfism on mehhanism, mille abil saab defineerida mitut meetodit sama nime ja allkirjaga ülemklassis ja alamklassis. Ülekirjutatud meetodi kutse lahendatakse käitusajal.

Dünaamilise polümorfismi näide:

Superklassi viitemuutuja võib viidata alamklassi objektile

 Doctor obj = new Surgeon();

Mõelge avaldusele

obj.treatPatient();

Siin on viitemuutuja "obj" põhiklassist, kuid objekt, millele see osutab, on alamklassist (nagu on näidatud allolevas polümorfismi diagrammi näites).

obj.treatPatient() käivitab raviPatient() meetodi alamklassist – Surgeon

Kui meetodi kutsumiseks kasutatakse baasklassi viidet, otsustab JVM, millist meetodit kutsutakse, olenevalt objektist, millele viide osutab.

Näiteks kuigi obj on viide arstile, kutsub see meetodit Surgeon, kuna see osutab kirurgi objektile

See otsustatakse tööaja jooksul ja seetõttu nimetatakse seda dünaamiline or käitusaegne polümorfism

Staatilise ja dünaamilise polümorfismi erinevus

Staatiline polümorfism sisse Java on polümorfismi tüüp, mis kogub teavet meetodi kutsumiseks kompileerimise ajal, samas kui dünaamiline polümorfism on polümorfismi tüüp, mis kogub teavet meetodi kutsumiseks käitusajal.

Staatiline polümorfism
Dünaamiline polümorfism
See on seotud meetodi ülekoormamisega. See on seotud meetodi tühistamisega.
Vead, kui neid on, lahendatakse kompileerimise ajal. Kuna koodi kompileerimise ajal ei käivitata, siis nimi staatiline.

ex:

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

Kui viitemuutuja kutsub välja tühistatud meetodi, määrab kutsutava meetodi objekt, millele viitab teie võrdlusmuutuja. Seda saab määrata ainult käitusajal, kui kood on täitmisel, sellest ka nimi dünaamiline.

ex:

//reference of parent pointing to child object
 Doctor obj = new Surgeon();
// method of child called
obj.treatPatient();

Supermärksõna sisse Java

Mis saab siis, kui Surgeon klassi raviPatsiendi meetod soovib käivitada klassis Doctor määratletud funktsionaalsust ja seejärel täita oma spetsiifilist funktsiooni? Sel juhul märksõna supersaab kasutada vanemklassi meetoditele juurdepääsuks alamklassist. Kirurgi klassi ravipatsiendi meetodi võiks kirjutada järgmiselt:

treatPatient(){
   super.treatPatient();
     //add code specific to Surgeon
}

Märksõna super saab kasutada alamklassi igale superklassi andmeliikmele või meetoditele juurdepääsuks.

Järgmisena tutvume märksõnaga Super, Pärisosa ja polümorfism sisse Java näidisprogrammidega.

Näide: pärimise, polümorfismi ja super märksõna õppimiseks

Step 1) Kopeerige järgmine kood redaktorisse

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 Y
         public void m1(){
            // overriden method
            System.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) Salvestage, kompileerige ja käivitage kood. Jälgige väljundit.

Step 3) Tühista read # 6-9. Salvestage, kompileerige ja käivitage kood. Jälgige väljundit.

Step 4) Kommentaaride tühistamise rida nr 10. Salvestage ja kompileerige kood.

Step 5) Viga =? Seda seetõttu, et alamklass ei pääse juurde superklassi eraliikmetele.

kokkuvõte

  • Objektorienteeritud programmeerimise polümorfism ilmneb siis, kui üks või mitu klassi või objekti on üksteisega pärimise teel seotud. See on objekti võime võtta mitmesuguseid vorme.
  • Meetodi alistamine on superklassi meetodi ümberdefineerimine alamklassis.
  • Dünaamiline polümorfism sisse Java on mehhanism, mille abil saab defineerida mitut meetodit sama nime ja allkirjaga ülemklassis ja alamklassis.
  • Staatiline polümorfism sisse Java on polümorfismi tüüp, mis kogub teavet meetodi kutsumiseks kompileerimise ajal, samas kui dünaamiline polümorfism on polümorfismi tüüp, mis kogub teavet meetodi kutsumiseks käitusajal.
  • Supermärksõna abil saab alamklassist pääseda juurde vanemklassi meetoditele.