Introducere în Runtime Polimorfism în Java

În acest articol, vom afla despre Polimorfismul Runtime din Java. „Poli” înseamnă „mulți” și „morf” înseamnă „tip”. Deci termenul de polimorfism indică același lucru de diferite tipuri. Aici vom vedea cum Java arhivează polimorfismul în timp de execuție, ceea ce înseamnă, după compilare, dar înainte de a rula codul.

Sintaxă:

Pentru polimorfismul de runtime în Java, ar trebui să urmați sintaxa de bază a java cu adnotări. @Override Adnotarea de @Override poate fi utilizată aici pentru a sublinia în mod specific ce metodă dorim să înlocuim.

Cum funcționează Runtime Polymorphism în Java?

Runtime polimorfismul funcționează în Java, prin intermediul metodei. Suprascrierea metodei se întâmplă atunci când obiectele au același nume și argumente și tip de metodă ca și clasa părinte, dar cu funcționalități diferite. Dacă o clasă pentru copii are acel tip de metodă, îl numim o metodă suprasolicitată.

De ce se numește Runtime Polimorfism?

atunci când apelăm la o metodă suprasolicitată a clasei copil prin referința sa de tip părinte (acest fenomen din java este denumit „Upcasting”), atunci tipul obiectului indică ce metodă sau funcționalitate va fi invocată. Luarea acestei decizii are loc în timpul rulării de către JVM după compilarea codului. De aici se numește polimorfism al timpului de funcționare.

Este, de asemenea, denumit „expediere dinamică a metodei”. Motivul fiind numit astfel, datorită faptului că funcționalitatea metodei este decisă în mod dinamic în timpul de rulare, conform obiectului de către JVM

De asemenea, se numește „Obligarea târzie”, deoarece legarea metodei și obiectului, ceea ce înseamnă că funcționalitatea metodei obiectului va fi afișată, este decisă târziu, adică după compilare.

Reguli și limitări în Runtim e Polimorfism

Mai jos sunt câteva dintre regulile și limitările polimorfismului de rulare:

Reguli ale polimorfismului de rulare

  • Metodele clasei de copii și părinți trebuie să aibă același nume.
  • Metodele clasei copilului și părinților trebuie să aibă același parametru.
  • Relația IS-O este obligatorie (moștenire).

Limitările polimorfismului în timp de rulare

  • Nu se poate înlocui metodele private ale unei clase de părinți.
  • Nu se poate trece peste metodele finale.
  • Nu se poate înlocui metodele statice.

Exemple de Runtime Polimorfism în Java

Vom discuta aici câteva exemple de cod ale polimorfismului timp de execuție.

Exemplul # 1

În acest exemplu, vom arăta modul în care metoda vitrină () afișează mesaje diferite în funcție de tipul de obiect cu care este asociat. Când este asociat cu tipul „Părinți”, acesta arată mesajele din clasa părinte. Întrucât, atunci când este asociat cu tipul „Copii”, acesta afișează mesaje din clasa copiilor.

Cod:

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

ieşire:

Exemplul # 2

Să luăm un exemplu de polimorfism al timpului de rulare în cazul moștenirii pe mai multe niveluri. În acest exemplu, am luat în considerare două niveluri de moștenire. În acest exemplu, vom arăta cum metoda sip () afișează mesaje diferite în funcție de tipul de obiect cu care este asociat. Când este asociat cu tipul „Uman”, acesta afișează mesaje de la o clasă părinte. Întrucât, atunci când este asociat cu tipul „Om”, acesta afișează mesaje din clasa sa de copii. Din nou în cel de-al doilea nivel de moștenire, atunci când este asociat cu tipul „Bebeluș”, acesta afișează mesaje din clasa de copil a părintelui său, care este clasa „Bărbat”.

Cod:

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

ieşire:

Exemplul # 3

Să luăm un alt exemplu de polimorfism al timpului de rulare în cazul moștenirii pe mai multe niveluri. În acest exemplu, avem trei niveluri de moștenire. În acest exemplu, vom arăta modul în care caracteristica metodei () afișează diferite caracteristici, în funcție de tipul de obiect cu care este asociat. Când este asociat cu tipul „sistem de operare”, acesta afișează mesaje dintr-o clasă părinte. Întrucât, atunci când este asociat cu tipul „DOS”, acesta afișează mesaje din clasa sa de copii. Din nou în cel de-al doilea nivel de moștenire, atunci când este asociat cu tipul „Windows”, acesta afișează mesaje din clasa copil a părintelui său, care este clasa „DOS”. Din nou în cel de-al treilea nivel de moștenire, atunci când este asociat cu tipul „WindowsMobile”, acesta afișează mesaje din clasa copil a părintelui său, care este clasa „Windows”.

Cod:

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

ieşire:

Concluzie

Acest lucru încheie învățarea noastră despre subiectul „Runtime Polymorphism in Java”. Scrieți-vă codurile menționate în exemplele de mai sus în compilatorul java și verificați ieșirea. Învățarea codurilor va fi incompletă dacă nu veți scrie cod singur.

Articole recomandate

Acesta a fost un ghid pentru Runtime Polimorfism în Java. Aici vom discuta despre modul în care Runtime Polimorfismul funcționează în Java cu exemple. De asemenea, puteți arunca o privire la următoarele articole pentru a afla mai multe -

  1. Cuvânt cheie statică în Java
  2. Suprasolicitare în Java
  3. Ce este Polimorfismul?
  4. Rust vs Golang