Introduktion til Runtime Polymorphism i Java

I denne artikel skal vi lære om Runtime Polymorphism i Java. "Poly" betyder "mange" og "morph" betyder "type". Så udtrykket polymorfisme angiver det samme af forskellige typer. Her vil vi se, hvordan Java arkiverer polymorfisme i køretid, hvilket betyder, efter kompilering, men før kørsel af koden.

Syntaks:

For runtime-polymorfisme i Java skal du følge den grundlæggende syntaks for java med kommentarer. @Override annotation kan bruges her til specifikt at påpege, hvilken metode vi vil tilsidesætte.

Hvordan Runtime-polymorfisme fungerer i Java?

Runtime-polymorfisme fungerer i Java efter metodeoverskridelse. Fremgangsmådeoverskridelse sker, når objekter har samme metodenavn og argumenter og type som i sin overordnede klasse, men med forskellige funktioner. Hvis en barneklasse har den type metode i sig, kalder vi den en overstyret metode.

Hvorfor kaldes det Runtime Polymorphism?

når vi kalder en overstyret metode til underordnet klasse gennem dens forældertypereference (dette fænomen i java kaldes ”Upcasting”), angiver objektets type, hvilken metode eller funktionalitet der vil blive påberåbt. At træffe denne beslutning sker i løbet af runtime af JVM efter kompilering af kode. Derfor kaldes det som polymorfisme af run time.

Det kaldes også "Dynamisk metodeafsendelse". Årsag til at blive navngivet sådan, på grund af det faktum, at metodens funktionalitet bestemmes dynamisk i kørselstid som pr. Objekt af JVM

Det kaldes også "Sen binding", fordi binding af metode og objekt, hvilket betyder funktionaliteten af ​​hvilket objekts metode vil blive vist, besluttes sent, dvs. efter kompilering.

Regler og begrænsninger i Runtim e Polymorphism

Nedenfor er nogle af reglerne og begrænsningerne i runtime-polymorfisme:

Regler for kørselspolymorfisme

  • Metoder til børn og forældreklasse skal have samme navn.
  • Metoder til børn og forældreklasse skal have den samme parameter.
  • IS-A-forhold er obligatorisk (arv).

Begrænsninger af kørselspolymorfisme

  • Man kan ikke tilsidesætte private metoder for en forældreklasse.
  • Man kan ikke tilsidesætte de endelige metoder.
  • Man kan ikke tilsidesætte statiske metoder.

Eksempler på Runtime-polymorfisme i Java

Vi vil drøfte nogle kodeeksempler på run time polymorfisme her.

Eksempel 1

I dette eksempel viser vi, hvordan metoden viser () viser forskellige meddelelser afhængigt af hvilken type objekt det er tilknyttet. Når det er knyttet til typen "Forældre", viser det meddelelser fra forældreklasse. Mens det er knyttet til typen "Børn", viser det meddelelser fra børneklasse.

Kode:

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
)
)

Produktion:

Eksempel 2

Lad os tage et eksempel på polymorfisme i løbetid i tilfælde af arv på flere niveauer. I dette eksempel har vi taget to niveauer i arv i betragtning. I dette eksempel viser vi, hvordan metoden sip () viser forskellige meddelelser afhængigt af hvilken type objekt den er tilknyttet. Når det er knyttet til typen "Human", viser det meddelelser fra en forældreklasse. Mens det er knyttet til typen "Mand", viser det meddelelser fra sin barneklasse. I det andet arvenniveau, når det er forbundet med typen "Baby", viser det igen beskeder fra sin barneklasse for sin forælder, der er "Mand" -klassen.

Kode:

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
)
)

Produktion:

Eksempel 3

Lad os tage et andet eksempel på polymorfisme i løbetid i tilfælde af arv på flere niveauer. I dette eksempel har vi tre niveauer for arv, der tages i betragtning. I dette eksempel viser vi, hvordan metodefunktionen () viser forskellige funktioner, afhængigt af hvilken type objekt den er tilknyttet. Når det er tilknyttet typen "operativsystem", viser det meddelelser fra en overordnet klasse. Mens det er knyttet til “DOS” -typen, viser det meddelelser fra sin barneklasse. I det andet arvenniveau, når det er knyttet til typen "Windows", viser det igen meddelelser fra sin underordnede klasse for dets forælder, der er "DOS" -klasse. I det tredje arveplan, når det er knyttet til typen "WindowsMobile", viser det igen meddelelser fra sin underordnede klasse for dets overordnede, der er "Windows" -klassen.

Kode:

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
)
)

Produktion:

Konklusion

Dette afslutter vores indlæring af emnet "Runtime Polymorphism in Java". Skriv selv de koder, der er nævnt i ovenstående eksempler, i java-kompilatoren, og verificer output. Indlæring af koder vil være ufuldstændig, hvis du ikke selv skriver kode.

Anbefalede artikler

Dette har været en guide til Runtime Polymorphism i Java. Her diskuterer vi, hvordan Runtime Polymorphism fungerer i java med eksempler. Du kan også se på de følgende artikler for at lære mere -

  1. Statisk nøgleord i Java
  2. Overstyring i Java
  3. Hvad er polymorfisme?
  4. Rust vs Golang

Kategori: