viimeisessä tutoriaalissa käsittelimme polymorfismia Javassa. Tässä oppaassa näemme tyypit polymorfismi. Jaavassa on kahdenlaisia polymorfeja:
1) Staattinen polymorfismi tunnetaan myös nimellä compile time polymorphism
2) dynaaminen polymorfismi tunnetaan myös nimellä runtime polymorphism
Compile time Polymorphism (tai staattinen polymorphism)
polymorfismi, joka ratkeaa kääntäjän aikana, tunnetaan nimellä staattinen polymorfismi. Method overloading on esimerkki compile time polymorfismista.
menetelmä Ylilataus: näin voidaan käyttää useampaa kuin yhtä saman nimistä menetelmää, jos menetelmien parametrit eroavat lukumäärältään, järjestykseltään ja tietotyypeiltään parametreista. Olemme jo keskustelleet menetelmästä ylikuormitus tässä: Jos et lukenut että opas, Katso: Method Overloading in Java
Example of staattinen Polymorphism
Method overloading on yksi tapa java tukee staattinen polymorphism. Tässä on kaksi määritelmää saman menetelmän lisää (), jota add-menetelmää kutsuttaisiin määräytyy parametriluettelon mukaan käännösajankohtana. Tästä syystä tämä tunnetaan myös nimellä compile time polymorfism.
class SimpleCalculator{ int add(int a, int b) { return a+b; } int add(int a, int b, int c) { return a+b+c; }}public class Demo{ public static void main(String args) { SimpleCalculator obj = new SimpleCalculator(); System.out.println(obj.add(10, 20)); System.out.println(obj.add(10, 20, 30)); }}
Lähtö:
3060
Runtime Polymorphism (tai dynaaminen polymorphism)
se tunnetaan myös nimellä Dynamic Method Dispatch. Dynaaminen polymorfismi on prosessi, jossa puhelu ohitetaan menetelmä ratkaistaan runtime, siksi sitä kutsutaan runtime polymorfismi. Olen jo keskustellut menetelmä ohittaminen yksityiskohtaisesti erillisessä opetusohjelma, katso se: menetelmä ohittaminen Java.
esimerkki
tässä esimerkissä meillä on kaksi luokkaa ABC ja XYZ. ABC on vanhempainluokka ja XYZ on lapsiluokka. Lapsiluokka ohittaa vanhempainluokan metodin (). Tässä esimerkissä meillä on lapsen luokan objekti määritetty vanhemman luokan viite, joten jotta voidaan määrittää, mitä menetelmää kutsuttaisiin, tyyppi objektin määritettäisiin ajonaikana. Oliotyyppi määrittää, mitä menetelmän versiota kutsutaan (ei viitetyyppiä).
ymmärtääkseen ylikertoimisen käsitteen, tulisi Jaavan kielen periytyvyyden perustieto olla hallussa.
class ABC{ public void myMethod(){System.out.println("Overridden Method"); }}public class XYZ extends ABC{ public void myMethod(){System.out.println("Overriding Method"); } public static void main(String args){ABC obj = new XYZ();obj.myMethod(); }}
tuloste:
Overriding Method
kun ohitettu menetelmä kutsutaan kantaluokan viittauksen kautta, objektin tyyppi määrää, mikä menetelmä on suoritettava. Näin ollen tämä määritys tehdään ajon aikana.
koska sekä luokilla, lapsiluokalla että vanhempainluokalla on sama menetelmä animalSound
. JVM määrittää suorituksen aikana, mitä menetelmää(lapsi-vai vanhempainluokkaa) kutsutaan.
muutamia muita ylivoimaisia esimerkkejä:
ABC obj = new ABC();obj.myMethod();// This would call the myMethod() of parent class ABCXYZ obj = new XYZ();obj.myMethod();// This would call the myMethod() of child class XYZABC obj = new XYZ();obj.myMethod();// This would call the myMethod() of child class XYZ
kolmannessa tapauksessa lapsiluokan menetelmä on suoritettava, koska toteutettava menetelmä määräytyy objektin tyypin mukaan ja koska objekti kuuluu lapsiluokkaan, kutsutaan lapsiluokan versiota mymetodista ().