Wprowadzenie do polimorfizmu Runtime w Javie

W tym artykule dowiemy się o polimorfizmie środowiska uruchomieniowego w Javie. „Poly” oznacza „wiele”, a „morf” oznacza „typ”. Zatem termin polimorfizm oznacza to samo różnych typów. Zobaczymy, jak Java archiwizuje polimorfizm w czasie wykonywania, co oznacza po kompilacji, ale przed uruchomieniem kodu.

Składnia:

W przypadku polimorfizmu środowiska wykonawczego w Javie należy postępować zgodnie z podstawową składnią java z adnotacjami. @Override można @Override adnotacji @Override, aby wyraźnie wskazać, którą metodę chcemy zastąpić.

Jak działa polimorfizm Runtime w Javie?

Polimorfizm środowiska uruchomieniowego działa w Javie przez przesłonięcie metody. Zastępowanie metod ma miejsce, gdy obiekty mają tę samą nazwę metody, argumenty i typ co klasa macierzysta, ale mają inną funkcjonalność. Jeśli klasa potomna zawiera tego typu metodę, nazywamy ją metodą przesłoniętą.

Dlaczego nazywa się polimorfizmem Runtime?

kiedy wywołujemy przesłoniętą metodę klasy potomnej poprzez jej odwołanie do typu macierzystego (to zjawisko w java jest nazywane „Upcastingiem”), wówczas typ obiektu wskazuje, która metoda lub funkcja zostanie wywołana. Podejmowanie tej decyzji odbywa się w czasie wykonywania przez JVM po kompilacji kodu. Dlatego nazywa się to polimorfizmem w czasie wykonywania.

Jest również nazywany „dynamiczną wysyłką metod”. Powód został nazwany tak, ponieważ funkcjonalność metody jest dynamicznie ustalana w czasie wykonywania zgodnie z obiektem przez JVM

Nazywa się to również „późnym wiązaniem”, ponieważ wiązanie metody i obiektu, co oznacza, że ​​funkcjonalność metody obiektu zostanie wyświetlona, ​​jest podejmowane późno, tj. Po kompilacji.

Reguły i ograniczenia w Runtim e Polimorfizm

Poniżej znajdują się niektóre zasady i ograniczenia polimorfizmu środowiska wykonawczego:

Zasady polimorfizmu środowiska uruchomieniowego

  • Metody klasy podrzędnej i nadrzędnej muszą mieć tę samą nazwę.
  • Metody klasy podrzędnej i nadrzędnej muszą mieć ten sam parametr.
  • Relacja IS-A jest obowiązkowa (dziedziczenie).

Ograniczenia polimorfizmu środowiska uruchomieniowego

  • Nie można przesłonić prywatnych metod klasy nadrzędnej.
  • Nie można przesłonić ostatecznych metod.
  • Nie można przesłonić metod statycznych.

Przykłady polimorfizmu środowiska uruchomieniowego w Javie

Omówimy tutaj przykłady kodu polimorfizmu w czasie wykonywania.

Przykład 1

W tym przykładzie pokażemy, w jaki sposób metoda showcase () wyświetla różne komunikaty w zależności od typu obiektu, z którym jest skojarzona. Gdy jest powiązany z typem „Rodzice”, wyświetla wiadomości z klasy nadrzędnej. Natomiast gdy jest skojarzone z typem „Dzieci”, wyświetla wiadomości z klasy potomnej.

Kod:

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

Wynik:

Przykład nr 2

Weźmy przykład polimorfizmu w czasie wykonywania w przypadku dziedziczenia wielopoziomowego. W tym przykładzie uwzględniliśmy dwa poziomy dziedziczenia. W tym przykładzie pokażemy, jak metoda sip () wyświetla różne komunikaty w zależności od typu obiektu, z którym jest skojarzona. Gdy jest skojarzony z typem „ludzkim”, wyświetla wiadomości od klasy nadrzędnej. Natomiast gdy jest skojarzone z typem „Człowiek”, wyświetla wiadomości ze swojej klasy potomnej. Ponownie na drugim poziomie dziedziczenia, gdy jest skojarzone z typem „Dziecko”, pokazuje wiadomości od swojej klasy potomnej rodzica, czyli klasy „Mężczyzna”.

Kod:

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

Wynik:

Przykład nr 3

Weźmy kolejny przykład polimorfizmu w czasie wykonywania w przypadku dziedziczenia wielopoziomowego. W tym przykładzie uwzględniono trzy poziomy dziedziczenia. W tym przykładzie pokażemy, w jaki sposób metoda method () wyświetla różne funkcje w zależności od typu obiektu, z którym jest skojarzona. Gdy jest skojarzony z typem „systemu operacyjnego”, wyświetla komunikaty z klasy nadrzędnej. Natomiast gdy jest skojarzony z typem „DOS”, wyświetla komunikaty ze swojej klasy potomnej. Ponownie na drugim poziomie dziedziczenia, gdy jest skojarzony z typem „Windows”, pokazuje wiadomości od swojej klasy potomnej jego rodzica, którą jest klasa „DOS”. Ponownie na trzecim poziomie dziedziczenia, gdy jest powiązany z typem „WindowsMobile”, wyświetla wiadomości od swojej klasy potomnej swojego rodzica, która jest klasą „Windows”.

Kod:

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

Wynik:

Wniosek

To kończy naszą naukę tematu „Runtime Polymorphism in Java”. Napisz sobie kody wymienione w powyższych przykładach w kompilatorze Java i sprawdź dane wyjściowe. Nauka kodów będzie niepełna, jeśli sam nie napiszesz kodu.

Polecane artykuły

Jest to przewodnik po polimorfizmie Runtime w Javie. Tutaj omawiamy przykłady działania polimorfizmu Runtime w Javie. Możesz także zapoznać się z następującymi artykułami, aby dowiedzieć się więcej -

  1. Statyczne słowo kluczowe w Javie
  2. Przesłanianie w Javie
  3. Co to jest polimorfizm?
  4. Rdza vs Golang