Polymorfismi sisään Java (Staattinen ja dynaaminen)

Mitä polymorfismi sisältää Java?

polymorfismi in Java tapahtuu, kun yksi tai useampi luokka tai objekti liittyvät toisiinsa perinnöllisesti. Se on esineen kykyä ottaa monia muotoja. Periytys antaa käyttäjien periä attribuutteja ja menetelmiä, ja polymorfismi käyttää näitä menetelmiä eri tehtävien suorittamiseen. Tavoitteena on siis viestintä, mutta lähestymistapa on erilainen.

Sinulla on esimerkiksi älypuhelin viestintää varten. Valitsemasi viestintätapa voi olla mikä tahansa. Se voi olla puhelu, tekstiviesti, kuvaviesti, posti jne. Yhteinen tavoite on siis viestintä, mutta heidän lähestymistapansa on erilainen. Tätä kutsutaan Polymorfismi. Nyt opimme polymorfismia Java esimerkin kanssa.

Napauta tätä jos video ei ole saatavilla

Java Polymorfismi OOP:issa esimerkin kanssa

Meillä on yksi yläluokka, "tili", jolla on talletus- ja kotiutustoiminto. Tilillä on 2 lapsiluokkaa. Talletus- ja kotiutustoiminnot ovat samat talletus- ja shekkitileillä. Joten tililuokasta perityt menetelmät toimivat.

Yksittäinen perintö sisään Java
Java Esimerkki polymorfismista

Ohjelmistovaatimusten muutos

Vaatimusmäärittelyssä on tapahtunut muutos, mikä on niin yleistä ohjelmistoteollisuudessa. Sinun pitäisi lisätä toiminnallinen etuoikeutettu pankkitili tilinylitysmahdollisuudella. Taustaa varten tilinylitys on ominaisuus, jossa voit nostaa enemmän kuin tilisi saldoa. Joten, peruuta menetelmä etuoikeutettujen tarpeiden toteuttamiseksi uudelleen. Et kuitenkaan muuta testattua koodia Säästö- ja sekkitilillä. Tämä on etu OHO

Java polymorfismi

Vaihe 1) Sellaista, että kun säästötilin "poistettua" menetelmää kutsutaan, suoritetaan menetelmä päätililuokasta

Java polymorfismi

Vaihe 2) Mutta kun etuoikeutetun tilin (tilinylitys) "nosto"-menetelmää kutsutaan etuoikeutetussa luokassa määritetty nostomenetelmä suoritetaan. Tämä on Polymorfismi OOP:issa.

Java polymorfismi

Menetelmän ohittaminen Java

Method Overriding on superluokan menetelmän uudelleenmäärittely alaluokassa.

Menetelmän ohittamista koskevat säännöt

  • Metodin allekirjoituksen eli menetelmän nimen, parametriluettelon ja palautustyypin on vastattava täsmälleen.
  • Ohitettu menetelmä voi laajentaa saavutettavuutta, mutta ei kaventaa sitä, eli jos se on perusluokassa yksityinen, aliluokka voi tehdä siitä julkisen, mutta ei päinvastoin.

Säännöt menetelmän ohittamiseksi Java

esimerkki

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

Ero ylikuormituksen ja ohituksen välillä

Menetelmä Ylikuormitus
Menetelmän ohittaminen
Metodin ylikuormitus on samassa luokassa, jossa useammalla kuin yhdellä menetelmällä on sama nimi, mutta eri allekirjoitukset. Metodin ohittaminen on, kun yksi superluokan menetelmistä määritetään uudelleen alaluokassa. Tässä tapauksessa menetelmän allekirjoitus pysyy samana.
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
 }
}

Mikä on dynaaminen polymorfismi?

Dynaaminen polymorfismi OOP:issa on mekanismi, jolla voidaan määrittää useita menetelmiä samalla nimellä ja allekirjoituksella superluokassa ja alaluokassa. Kutsu ohitettuun metodiin ratkaistaan ​​ajon aikana.

Esimerkki dynaamisesta polymorfismista:

Superluokan viitemuuttuja voi viitata alaluokan objektiin

 Doctor obj = new Surgeon();

Harkitse lausuntoa

obj.treatPatient();

Tässä viitemuuttuja “obj” on emoluokkaa, mutta objekti, johon se osoittaa, on aliluokkaa (kuten alla olevassa polymorfismin kaavioesimerkissä näkyy).

obj.treatPatient() suorittaa alaluokan - Surgeon -menetelmän treatPatient()

Jos menetelmän kutsumiseen käytetään perusluokan viittausta, JVM päättää kutsuttavan menetelmän riippuen objektista, johon viittaus osoittaa.

Esimerkiksi vaikka obj on viittaus lääkäriin, se kutsuu menetelmää Surgeon, koska se osoittaa kirurgin objektiin

Tämä päätetään ajon aikana, ja siksi sitä kutsutaan nimellä dynaaminen or ajonaikainen polymorfismi

Ero staattisen ja dynaamisen polymorfismin välillä

Staattinen polymorfismi sisään Java on polymorfismin tyyppi, joka kerää tiedot menetelmän kutsumiseksi käännöshetkellä, kun taas dynaaminen polymorfismi on eräänlainen polymorfismi, joka kerää tiedot menetelmän kutsua varten ajon aikana.

Staattinen polymorfismi
Dynaaminen polymorfismi
Se liittyy menetelmän ylikuormitukseen. Se liittyy menetelmän ohittamiseen.
Mahdolliset virheet korjataan käännösvaiheessa. Koska koodia ei suoriteta kääntämisen aikana, nimi on staattinen.

ex:

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

Jos viitemuuttuja kutsuu ohitettua menetelmää, kutsuttavan menetelmän määrittää objekti, johon viitemuuttujasi osoittaa. Tämä voidaan määrittää vain ajon aikana, kun koodia suoritetaan, joten nimi on dynaaminen.

ex:

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

Superavainsana sisään Java

Entä jos Surgeon-luokan treatPatient-menetelmä haluaa suorittaa Doctor-luokassa määritellyt toiminnot ja suorittaa sitten oman toiminnallisuutensa? Tässä tapauksessa avainsana supervoidaan käyttää pääluokan menetelmien avaamiseen lapsiluokasta. Hoitopotilasmenetelmä Surgeon-luokassa voitaisiin kirjoittaa seuraavasti:

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

Avainsanalla super voidaan käyttää mitä tahansa aliluokan superluokan datajäsentä tai menetelmiä.

Seuraavaksi opimme Super-avainsanasta, Perintö ja polymorfismi sisällä Java esimerkkiohjelmilla.

Esimerkki: - Perinnön, polymorfismin ja superavainsanan oppiminen

Vaihe 1) Kopioi seuraava koodi editoriin

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

Vaihe 2) Tallenna, käännä ja suorita koodi. Tarkkaile lähtöä.

Vaihe 3) Kommentoi rivit 6-9. Tallenna, käännä ja suorita koodi. Tarkkaile lähtöä.

Vaihe 4) Kommentoinnin poisto rivi #10. Tallenna ja käännä koodi.

Vaihe 5) Virhe =? Tämä johtuu siitä, että alaluokka ei voi käyttää superluokan yksityisiä jäseniä.

Yhteenveto

  • Olioohjelmoinnin polymorfia ilmenee, kun yksi tai useampi luokka tai objekti liittyvät toisiinsa perinnöllisesti. Se on esineen kykyä ottaa monia muotoja.
  • Method Overriding on superluokan menetelmän uudelleenmäärittely alaluokassa.
  • Dynaaminen polymorfismi sisään Java on mekanismi, jolla voidaan määrittää useita menetelmiä samalla nimellä ja allekirjoituksella superluokassa ja alaluokassa.
  • Staattinen polymorfismi sisään Java on polymorfismin tyyppi, joka kerää tiedot menetelmän kutsumiseksi käännöshetkellä, kun taas dynaaminen polymorfismi on eräänlainen polymorfismi, joka kerää tiedot menetelmän kutsua varten ajon aikana.
  • Super-avainsanalla voidaan päästä pääluokan menetelmiin lapsiluokasta.