Polymorfismi sisään Java (Staattinen ja dynaaminen)

⚡ Älykäs yhteenveto

Polymorfismi sisään Java mahdollistaa yhden käyttöliittymän edustaa useita lomakkeita, joten yksi metodin nimi käyttäytyy eri tavalla toisiinsa liittyvien luokkien välillä. Se on oliopohjaisen suunnittelun pilari, joka edistää joustavuutta, koodin uudelleenkäyttöä ja perinteisten pankki-, lääketieteellisten ja yritysjärjestelmien selkeää laajentamista.

  • 🎭 Monta muotoa, yksi nimi: Polymorfismi sisään Java antaa saman metodin nimen välittää eri toteutuksiin suoritusajankohdan todellisen objektityypin perusteella.
  • 🔀 Kaksi makua: Käännösaikainen polymorfismi käyttää metodin ylikuormitusta, kun taas ajonaikainen polymorfismi käyttää metodin ohittamista periytymisen ja JVM:n kautta.
  • ⛓️ Staattinen vs. dynaaminen sidonta: Ylikuormitetut kutsut ratkaistaan ​​käännösaikana staattisen sidonnan kautta, kun taas ohitetut kutsut ratkaistaan ​​suorituksen aikana dynaamisen sidonnan kautta.
  • ✅ Super avainsanavoima: Super-avainsana antaa aliluokan kutsua päätoteutusta ennen oman erikoistuneen toimintansa lisäämistä päälle.
  • 🧪 Todellinen ulottuvuus: Pankkitilit, sairaalahenkilökunnan hierarkiat ja muodonrenderöintimoottorit käyttävät kaikki polymorfismia uusien vaatimusten kasvattamiseen rikkomatta testattua koodia.

Polymorfismi sisään Java

Mitä polymorfismi sisältää Java?

Polymorfismi sisään Java Perinnöllisyys eli polymorfismi tapahtuu, kun yksi tai useampi luokka tai objekti liittyy toisiinsa periytymisen kautta. Se on objektin kyky ottaa monia muotoja. Perintä antaa käyttäjien periä ominaisuuksia ja metodeja, ja polymorfismi käyttää näitä metodeja erilaisten tehtävien suorittamiseen. Tavoitteena on kommunikointi, vaikka lähestymistapa voi vaihdella.

Esimerkiksi älypuhelinta käytetään viestintään. Viestintätapa voi olla puhelu, tekstiviesti, kuvaviesti tai sähköposti. Tavoite on yhteinen, eli viestintä, mutta lähestymistapa on erilainen. Tämä käyttäytyminen on ydin polymorfismiNyt opimme polymorfismin Java esimerkkikoodilla, kaavioilla ja vaiheittaisilla selityksillä.

Napauta täältä jos video ei ole saatavilla

Miksi polymorfismia käytetään Java?

Polymorfismi sisään Java käytetään, koska se tekee koodista joustavaa, uudelleenkäytettävää ja helpommin ylläpidettävää. Yksi päätyypin viittausmuuttuja voi osoittaa useisiin aliobjekteihin, joten sama kutsu mukautuu mihin tahansa annettuun alaluokkaan. Tämä malli pitää testatun koodin koskemattomana, kun taas uutta toimintaa lisätään erikoistuneiden alaluokkien kautta, minkä vuoksi kehykset, kuten Spring ja Jakarta EE, ovat riippuvaisia ​​siitä.

Java Polymorfismi OOP:issa esimerkin kanssa

Tarkastellaan yhtä yläluokkaa nimeltä Tili funktioilla talletusta ja nostoa varten. Tili-luokalla on kaksi aliluokkaa. Talletus- ja nostooperaatiot ovat samat sekä säästö- että käyttötileille, joten Tili-luokasta perityt metodit toimivat.

Yksittäinen perintö sisään Java

Java Esimerkki polymorfismista

Ohjelmistovaatimusten muutos

Vaatimusmäärittelyssä on muutos, mikä on yleistä ohjelmistoalalla. Tilinylitysmahdollisuudella varustetun etuoikeutetun pankkitilin toiminnallisuus on lisättävä. Tilinylitys on ominaisuus, jossa asiakas voi nostaa tilillä käytettävissä olevaa saldoa suuremman summan. Etuoikeutetun tilin nostomenetelmä vaatii uuden toteutuksen, kun taas säästö- ja käyttötilien testattua koodia ei muuteta. Tämä eristäminen on sen etu, että OHO.

Java polymorfismi

Vaihe 1) Kun säästötiliä varten kutsutaan nostometodia, suoritetaan päätilin luokassa määritelty metodi.

Java polymorfismi

Vaihe 2) Kun etuoikeutetun tilin (tililimiitin) nosto-metodia kutsutaan, suoritetaan etuoikeutetussa luokassa määritelty nosto-metodi. Tämä lähetys on Polymorfismi OOP-rakenteissa.

Java polymorfismi

Menetelmän ohittaminen Java

Metodin korvaaminen on prosessi, jossa yläluokan metodi määritellään uudelleen aliluokan sisällä. Alaluokka säilyttää saman metodin.tract, mutta tarjoaa uuden toteutuksen, joka valitaan ohjelman suorituksen yhteydessä.

Menetelmän ohittamista koskevat säännöt

  • Metodin allekirjoituksen eli metodin nimen, parametrilistan ja paluutyypin on oltava täsmälleen samat.
  • Ohitettu metodi voi laajentaa saavutettavuutta, mutta se ei voi rajata sitä. Jos metodi on yksityinen perusluokassa, lapsiluokka voi tehdä siitä julkisen, mutta ei toisinpäin.

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 menetelmän ylikuormituksen ja menetelmän ohittamisen välillä

Metodin ylikuormitus tapahtuu saman luokan sisällä, mutta samalla metodin nimellä, mutta eri allekirjoituksilla. Metodin ohitus tapahtuu ylä- ja alaluokkasuhteessa, jossa aliluokka määrittelee uudelleen yläluokassa ilmoitetun metodin.

Menetelmä Ylikuormitus
Menetelmän ohittaminen
Metodin ylikuormitus (Method Overloading) kuuluu samaan luokkaan, jossa useammalla kuin yhdellä metodilla on sama nimi, mutta eri allekirjoitukset. Metodin ohittaminen tarkoittaa, että jokin yliluokan metodeista määritellään uudelleen alikategoriassa. Tässä tapauksessa metodin 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-metodeissa on mekanismi, jolla useita metodeja voidaan määritellä samalla nimellä ja allekirjoituksella sekä superluokassa että alikategoriassa. Kutsu ohitettuun metodiin ratkaistaan ​​ajonaikana dynaamisen sidonnan avulla JVM:n sisällä.

Dynaaminen polymorfismiesimerkki

Yläluokan viitemuuttuja voi viitata aliluokan objektiin:

 Doctor obj = new Surgeon();

Harkitse lausuntoa:

obj.treatPatient();

Tässä vertailumuuttuja obj kuuluu pääluokkaan, mutta objekti, johon se osoittaa, kuuluu lapsiluokkaan, kuten polymorfismikaaviossa on esitetty.

Soitto obj.treatPatient() suorittaa Surgeon-alaluokan treatPatient()-metodin. Kun metodia kutsutaan perusluokan viittauksen avulla, JVM päättää kutsuttavan metodin sen todellisen objektin perusteella, johon viittaus osoittaa. Vaikka obj on viittaus Doctor-olioon, se kutsuu Surgeon-metodia, koska se viittaa Surgeon-olioon. Päätös tehdään ajonaikana, minkä vuoksi sitä kutsutaan Dynaaminen polymorfismi tai ajonaikaista polymorfismia.

Ero staattisen ja dynaamisen polymorfismin välillä

Staattinen polymorfismi sisään Java on polymorfismityyppi, joka kerää tiedot metodin kutsumiseksi käännösaikana, kun taas dynaaminen polymorfismi on polymorfismityyppi, joka kerää tiedot metodin kutsumiseksi suorituksen aikana.

Staattinen polymorfismi
Dynaaminen polymorfismi
Se liittyy metodin ylikuormitukseen. Se liittyy metodin ohittamiseen.
Mahdolliset virheet korjataan käännösaikana. Koska koodia ei suoriteta käännöksen 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.
Kun viittausmuuttuja kutsuu ohitettua metodia, kutsuttava metodi määräytyy sen objektin mukaan, johon viittausmuuttuja osoittaa. Tämä voidaan määrittää vain ajonaikana, kun koodia suoritetaan, minkä vuoksi 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-metodi haluaa suorittaa Doctor-luokassa määritellyn toiminnallisuuden ja sitten toimia omalla tavallaan? Tässä tapauksessa avainsana super voidaan käyttää pääluokan menetelmien avaamiseen lapsiluokasta. Hoitopotilasmenetelmä Surgeon-luokassa voitaisiin kirjoittaa seuraavasti:

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

Avainsanaa super voidaan käyttää minkä tahansa yliluokan datajäsenen tai metodin käyttämiseen aliluokan sisällä. Seuraavaksi tutustumme super-avainsanaan, Perintöja polymorfismi Java esimerkkiohjelmilla.

Esimerkki: Perinnöllisyyden, polymorfismin ja super-avainsanan 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(){
            // overridden 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 tulostetta.

Vaihe 3) Poista kommentit riveiltä 6–9. Tallenna, käännä ja suorita koodi. Tarkkaile tulostetta.

Vaihe 4) Poista kommentti riviltä 10. Tallenna ja käännä koodi.

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

UKK

Polymorfismi sisään Java on objektin kyky ottaa monia muotoja. Sama metodin nimi voi suorittaa eri koodia riippuen siitä, mihin aliluokan objektiin viitataan ajonaikana, mikä on OOP:n ydinkäyttäytyminen.

Java tukee käännösaikaista polymorfismia metodien ylikuormituksen kautta ja ajonaikaista polymorfismia metodien ohituksen kautta. Ylikuormitus ratkaistaan ​​käännösaikana staattisen sidonnan avulla, kun taas ohitus ratkaistaan ​​ajonaikana JVM:n käsittelemän dynaamisen sidonnan avulla.

Staattinen sidonta linkittää metodikutsun sen määritelmään käännösaikana ja sitä käytetään metodin ylikuormitukseen. Dynaaminen sidonta linkittää kutsun suorituksen aikana todellisen objektityypin perusteella ja antaa voimaa metodin ohittamiseen Java.

Super-avainsana antaa aliluokan kutsua ohitettua metodia tai käyttää pääluokan datajäsentä. Tämä antaa aliluokan käyttää uudelleen pääluokan logiikkaa ja lisätä sen päälle erikoistuneita toimintoja.

Tekoälyopettajat, kuten ChatGPT ja GitHub Copilot Chat, voivat selittää polymorfismin Java mukautettuja analogioita käyttäen, harjoitustehtävien luominen, periytymispuiden läpikäyminen ja staattisen ja dynaamisen sidonnan vertailu oppijoille nopeamman hallinnan saavuttamiseksi.

Kyllä. Tekoälypohjaiset refaktorointiavustajat, kuten Cursor, Sourcegraph Cody ja IntelliJ AI Assistant, voivat havaita päällekkäisiä ehtoja, ehdottaa luokkahierarkioita ja kirjoittaa vanhat elementit uudelleen. Java koodia siten, että metodin ohittaminen korvaa toistuvat if-else-ketjut.

Tiivistä tämä viesti seuraavasti: