Sissejuhatus käitusaja polümorfismi Java-s

Selles artiklis õpime tundma Java Runtime polümorfismi. “Poly” tähendab “palju” ja “morph” tähendab “type”. Niisiis osutab termin polümorfism eri tüüpi sama asja. Siit näeme, kuidas Java arhiveerib polümorfismi käitamisajal, mis tähendab pärast kompileerimist, kuid enne koodi käivitamist.

Süntaks:

Käivitusaegse polümorfismi jaoks Java-s peaksite järgima java põhisüntaksi koos märkustega. @Override märkust võib siin kasutada selleks, et konkreetselt välja tuua, millist meetodit me alistada soovime.

Kuidas Runtime Polymorphism Java töötab?

Runtime polümorfism toimib Java-s meetodil ülimuslikuna. Meetodi alistamine toimub siis, kui objektidel on sama meetodi nimi, argumendid ja tüüp kui vanemklassil, kuid erineva funktsionaalsusega. Kui lasteklassis on seda tüüpi meetod, nimetame seda ülepakutud meetodiks.

Miks seda nimetatakse Runtime Polymorphismiks?

kui me kutsume üleklassitud meetodiks lasteklassi selle vanemtüübi viite kaudu (seda nähtust javas nimetatakse "edastamiseks"), siis objekti tüüp näitab, millist meetodit või funktsionaalsust kutsutakse. Selle otsuse tegemine toimub JVM-i käitusaja jooksul pärast koodi kompileerimist. Seetõttu nimetatakse seda jooksuaja polümorfismiks.

Seda nimetatakse ka “dünaamiliseks meetodi saatmiseks”. Põhjus, miks seda nimetatakse, tuleneb asjaolust, et JVM otsustab meetodi funktsionaalsuse dünaamiliselt käitamisaja järgi vastavalt objektile

Seda nimetatakse ka “hiliseks sidumiseks”, kuna meetodi ja objekti sidumine, mis tähendab, millist funktsiooni objekti meetod kuvatakse, otsustatakse hilja, st pärast kompileerimist.

Runtim e polümorfismi reeglid ja piirangud

Allpool on toodud mõned käitusaja polümorfismi reeglid ja piirangud:

Kestuspolümorfismi reeglid

  • Lapse ja vanema klassi meetoditel peab olema sama nimi.
  • Lapse ja vanema klassi meetoditel peab olema sama parameeter.
  • IS-suhe on kohustuslik (pärand).

Kestuspolümorfismi piirangud

  • Vanema klassi eraviisilisi meetodeid ei saa ümber lükata.
  • Lõplikke meetodeid ei saa tühistada.
  • Staatilisi meetodeid ei saa tühistada.

Runtime polümorfismi näited Java-s

Siin käsitleme mõningaid käitusaja polümorfismi koodinäiteid.

Näide nr 1

Selles näites näitame, kuidas meetodi tutvustus () kuvab erinevaid teateid sõltuvalt sellest, millist tüüpi objekti see on seotud. Kui see on seotud tüübiga „Vanemad”, näitab see vanemklassi teateid. Kui seda seostatakse tüübiga „Lapsed”, siis see näitab sõnumeid lasteklassist.

Kood:

class Parents (
public void showcase () (
System.out.println("I am Parent");
)
)
class Children extends Parents (
@Override
public void showcase () (
System.out.println("I am Children");
)
)
public class RunTimePolymorphism (
public static void main(String args()) (
Parents superObject = new Parents();
superObject.showcase(); //method of super class or parent class is called
Parents subObject = new Children(); // upcasting
subObject.showcase();//method of sub class or child class is called by Parent reference, this is called "Run time Polymorphism"
Children subObject2 = new Children();
subObject2.showcase(); //method of sub class or child class is called
)
)

Väljund:

Näide 2

Võtame näite jooksuaja polümorfismist mitmetasandilise pärimise korral. Selles näites oleme arvesse võtnud kahte päranditasandit. Selles näites näitame, kuidas meetod sip () kuvab erinevaid teateid sõltuvalt sellest, millist tüüpi objekti see on seotud. Kui see on seotud tüübiga „Inimene”, näitab see vanemklassi teateid. Arvestades, et kui seda seostatakse tüübiga „inimene”, näitab see oma lasteklassi teateid. Jällegi, päranduse teisel astmel, kui seda seostatakse tüübiga „beebi”, näitab ta oma vanema klassi, mis on „mees”, sõnumeid.

Kood:

class Human(
void sip() (
System.out.println("Human is sipping");
)
)
class Man extends Human(
void sip()(
System.out.println("Man is sipping soup");
)
)
class Baby extends Man(
void sip()(
System.out.println("Baby is sipping milk");
)
)
public class RunTimePolymorphism (
public static void main(String args())(
Human superObject=new Human();
Human subObject=new Man(); // // upcasting : first level of heritance
Human babyObject=new Baby(); // // upcasting : second level of heritance
superObject.sip();
subObject.sip(); //run time polymorphism happening in first level of heritance
babyObject.sip(); //run time polymorphism happening in second level of heritance
)
)

Väljund:

Näide 3

Võtame veel ühe näite jooksuaja polümorfismist mitmetasandilise pärimise korral. Selles näites võetakse arvesse päranduse kolme taset. Selles näites näitame, kuidas meetodifunktsioon () kuvab erinevaid funktsioone sõltuvalt sellest, millist tüüpi objekti see on seotud. Kui see on seotud „opsüsteemi” tüübiga, näitab see vanemklassi teateid. Arvestades, et kui see on seotud tüübiga DOS, näitab see oma lasteklassi teateid. Jällegi, päranduse teisel tasemel, kui see on seotud „Windowsi” tüübiga, näitab see oma vanema klassi, mis on DOS-klass, sõnumeid. Kolmandal pärandustasandil, kui seda seostatakse tüübiga „WindowsMobile”, kuvatakse jällegi tema vanema klassi, mis on „Windows”, sõnumeid.

Kood:

class OperatingSytem(
void feature() (
System.out.println("This is Operating Sytem");
)
)
class DOS extends OperatingSytem(
void feature()(
System.out.println("This is DOS");
)
)
class Windows extends DOS(
void feature()(
System.out.println("This is Windows");
)
)
class WindowsMobile extends Windows(
void feature()(
System.out.println("This is Windows Mobile");
)
)
public class RunTimePolymorphism (
public static void main(String args())(
OperatingSytem superObject=new OperatingSytem();
OperatingSytem subObject=new DOS(); // child object type : first level of heritance
OperatingSytem sub2Object=new Windows(); // child object type : second level of heritance
OperatingSytem sub3Object=new WindowsMobile(); // child object type : third level of heritance
superObject.feature();
subObject.feature(); //run time polymorphism happening in first level of heritance
sub2Object.feature(); //run time polymorphism happening in second level of heritance
sub3Object.feature(); //run time polymorphism happening in third level of heritance
)
)

Väljund:

Järeldus

Sellega lõpetame meie teema "Runtime Polymorphism in Java" õppimise. Kirjutage ise ülaltoodud näidetes mainitud koodid Java-kompilaatorisse ja kontrollige väljundit. Koodide õppimine on puudulik, kui te ise koodi ei kirjuta.

Soovitatavad artiklid

See on olnud Java Runtime polümorfismi juhend. Siin käsitleme näidete abil, kuidas Runtime Polymorphism javas töötab. Võite lisateabe saamiseks vaadata ka järgmisi artikleid -

  1. Staatiline märksõna Java-s
  2. Ülekaalus Java
  3. Mis on polümorfism?
  4. Rooste vs Golang

Kategooria: