w ostatnim tutorialu omówiliśmy polimorfizm w Javie. W tym przewodniku zobaczymy rodzaje polimorfizmu. Istnieją dwa rodzaje polimorfizmu w Javie:
1) polimorfizm statyczny znany również jako polimorfizm w czasie kompilacji
2) polimorfizm dynamiczny znany również jako polimorfizm w czasie kompilacji
polimorfizm w czasie kompilacji (lub polimorfizm statyczny)
polimorfizm, który jest rozwiązany w czasie kompilacji, jest znany jako polimorfizm statyczny. Przeciążenie metody jest przykładem polimorfizmu czasu kompilacji.
przeciążenie metody: dzięki temu możemy mieć więcej niż jedną metodę o tej samej nazwie, jeśli parametry metod są różne pod względem liczby, sekwencji i typów danych parametrów. Omówiliśmy już tutaj metodę przeciążania: jeśli nie czytałeś tego przewodnika, zobacz: metoda przeciążania w Javie
przykład polimorfizmu statycznego
metoda przeciążania jest jednym ze sposobów, w jaki java wspiera polimorfizm statyczny. Tutaj mamy dwie definicje tej samej metody add (), która zostanie wywołana metodą add jest określona przez listę parametrów w czasie kompilacji. Z tego powodu jest to również znane jako polimorfizm czasu kompilacji.
class SimpleCalculator{ int add(int a, int b) { return a+b; } int add(int a, int b, int c) { return a+b+c; }}public class Demo{ public static void main(String args) { SimpleCalculator obj = new SimpleCalculator(); System.out.println(obj.add(10, 20)); System.out.println(obj.add(10, 20, 30)); }}
:
3060
polimorfizm czasowy (lub polimorfizm dynamiczny)
jest również znany jako metoda dynamiczna. Dynamiczny polimorfizm jest procesem, w którym wywołanie metody nadpisanej jest rozwiązywane w trybie runtime, dlatego nazywa się to polimorfizmem runtime. Omówiłem już metodę nadpisywania szczegółowo w osobnym tutorialu, odnoszą się do niego: metoda nadpisywania w Javie.
przykład
w tym przykładzie mamy dwie klasy ABC i XYZ. ABC to klasa rodzica, a XYZ to klasa dziecka. Klasa podrzędna nadpisuje metodę myMethod () klasy nadrzędnej. W tym przykładzie mamy obiekt klasy potomnej przypisany do klasy nadrzędnej, więc w celu określenia, która metoda zostanie wywołana, typ obiektu zostanie określony w czasie wykonywania. To typ obiektu określa, która wersja metody zostanie wywołana (a nie Typ referencji).
aby zrozumieć koncepcję nadpisywania, powinieneś mieć podstawową wiedzę na temat dziedziczenia w Javie.
class ABC{ public void myMethod(){System.out.println("Overridden Method"); }}public class XYZ extends ABC{ public void myMethod(){System.out.println("Overriding Method"); } public static void main(String args){ABC obj = new XYZ();obj.myMethod(); }}
wyjście:
Overriding Method
gdy jest wywołana metoda nadpisana przez odniesienie klasy nadrzędnej, wtedy typ obiektu określa, która metoda ma zostać wykonana. Tak więc określenie to jest dokonywane w czasie wykonywania.
ponieważ obie klasy, Klasa dziecka i klasa rodzica mają tę samą metodę animalSound
. Która wersja metody (Klasa potomna lub klasa rodzica) zostanie wywołana jest określana w trybie runtime przez JVM.
jeszcze kilka nadrzędnych przykładów:
ABC obj = new ABC();obj.myMethod();// This would call the myMethod() of parent class ABCXYZ obj = new XYZ();obj.myMethod();// This would call the myMethod() of child class XYZABC obj = new XYZ();obj.myMethod();// This would call the myMethod() of child class XYZ
w trzecim przypadku metoda klasy potomnej ma być wykonana, ponieważ to, Która metoda ma być wykonana, jest określone przez typ obiektu i ponieważ obiekt należy do klasy potomnej, zostanie wywołana wersja klasy potomnej mymethod ().