Polimorfizm w Javie jest pojęciem, dzięki któremu możemy wykonać jedną akcję na różne sposoby. Polimorfizm wywodzi się od 2 greckich słów: poly i morphs. Słowo „poly” oznacza wiele, a „morphs” oznacza formy. Tak więc polimorfizm oznacza wiele form.
W Javie istnieją dwa rodzaje polimorfizmu: polimorfizm w czasie kompilacji i polimorfizm w czasie wykonywania. Możemy wykonać polimorfizm w Javie poprzez przeciążanie metod i nadpisywanie metod.
Jeśli przeciążymy statyczną metodę w Javie, jest to przykład polimorfizmu czasu kompilacji. Tutaj skupimy się na polimorfizmie w czasie rzeczywistym w Javie.
Polimorfizm w czasie rzeczywistym w Javie
Polimorfizm w czasie rzeczywistym lub dynamiczna wysyłka metod to proces, w którym wywołanie nadrzędnej metody jest rozwiązywane w czasie wykonywania, a nie w czasie kompilacji.
W tym procesie nadrzędna metoda jest wywoływana przez zmienną referencyjną nadklasy. Określenie metody, która ma zostać wywołana, jest oparte na obiekcie, do którego odnosi się zmienna referencyjna.
Zrozummy najpierw upcasting przed Runtime Polymorphism.
Upcasting
Jeśli zmienna referencyjna klasy Parent odnosi się do obiektu klasy Child, jest to znane jako upcasting. Na przykład:
Do upcastingu możemy użyć zmiennej referencyjnej typu klasy lub typu interfejsu. Na przykład:
Tutaj, relacja klasy B byłaby następująca:
B IS-A AB IS-A IB IS-A Object
Ponieważ Object jest klasą główną wszystkich klas w Javie, więc możemy napisać B IS-A Object.
Przykład polimorfizmu w czasie rzeczywistym w Javie
W tym przykładzie, tworzymy dwie klasy Bike i Splendor. Klasa Splendor rozszerza klasę Bike i nadpisuje jej metodę run(). Wywołujemy metodę run przez zmienną referencyjną klasy Parent. Ponieważ odwołuje się ona do obiektu podklasy, a metoda podklasy nadpisuje metodę klasy Parent, metoda podklasy jest wywoływana w czasie wykonywania.
Ponieważ wywołanie metody jest określane przez JVM, a nie kompilator, jest to znane jako polimorfizm w czasie wykonywania.
Testuj teraz
Wyniki:
running safely with 60km.
Przykład polimorfizmu w czasie wykonywania w Javie: Bank
Rozważmy scenariusz, w którym Bank jest klasą, która zapewnia metodę, aby uzyskać stopę procentową. Jednakże, stopa procentowa może się różnić w zależności od banku. Na przykład, banki SBI, ICICI i AXIS dostarczają 8.4%, 7.3% i 9.7% stopy procentowej.
Uwaga: Ten przykład jest również podany w metodzie overriding, ale nie było upcastingu.
Test it Now
Output:
SBI Rate of Interest: 8.4ICICI Rate of Interest: 7.3AXIS Rate of Interest: 9.7
Przykład polimorfizmu Java Runtime: Shape
Test it Now
Output:
drawing rectangle...drawing circle...drawing triangle...
Java Runtime Polymorphism Example: Animal
Test it Now
Output:
eating bread...eating rat...eating meat...
Java Runtime Polymorphism with Data Member
Metoda jest nadrzędna, a nie członkowie danych, więc polimorfizm runtime nie może być osiągnięty przez członków danych.
W przykładzie podanym poniżej, obie klasy mają członka danych speedlimit. Uzyskujemy dostęp do członka danych przez zmienną referencyjną klasy Parent, która odnosi się do obiektu podklasy. Ponieważ uzyskujemy dostęp do członka danych, który nie jest nadpisany, stąd będzie on miał dostęp do członka danych klasy Parent zawsze.
Reguła: Runtime polimorfizm nie może być osiągnięty przez członków danych.
Testuj teraz
Wyjście: