Polimorfizm w obiektach operacyjnych Java z przykładem

Spisie treści:

Anonim

Co to jest polimorfizm w Javie?

Polimorfizm w Javie występuje, gdy istnieje jedna lub więcej klas lub obiektów powiązanych ze sobą przez dziedziczenie. Innymi słowy, jest to zdolność obiektu do przybierania wielu form. Dziedziczenie umożliwia użytkownikom dziedziczenie atrybutów i metod, a polimorfizm wykorzystuje te metody do wykonywania różnych zadań. Tak więc celem jest komunikacja, ale podejście jest inne.

Na przykład masz smartfon do komunikacji. Wybrany tryb komunikacji może być dowolny. Może to być rozmowa telefoniczna, wiadomość tekstowa, wiadomość obrazkowa, poczta e-mail itp. Tak więc cel jest powszechny, czyli komunikacja, ale ich podejście jest inne. Nazywa się to polimorfizmem.

W tym samouczku nauczysz się:

  • Co to jest polimorfizm?
  • Polimorfizm Java w OOP z przykładem
  • Zastępowanie metody
  • Różnica między przeciążaniem a zastępowaniem
  • Co to jest polimorfizm dynamiczny?
  • Super słowo kluczowe
  • Różnica między polimorfizmem statycznym i dynamicznym

Kliknij tutaj, jeśli wideo nie jest dostępne

Polimorfizm Java w OOP z przykładem

Mamy jedną klasę nadrzędną „Konto” z funkcją wpłaty i wypłaty. Konto ma 2 klasy potomne . Operacje wpłaty i wypłaty są takie same dla kont oszczędnościowych i czekowych. Więc odziedziczone metody z klasy Account będą działać.

Zmiana wymagań dotyczących oprogramowania

Nastąpiła zmiana w specyfikacji wymagań, coś, co jest tak powszechne w branży oprogramowania. Powinieneś dodać funkcjonalność uprzywilejowanego konta bankowego z linią debetową.

W tle, debet to instrument, z którego można wypłacić kwotę wyższą niż dostępne saldo na koncie.

Dlatego wycofaj metodę dla potrzeb uprzywilejowanych, aby zaimplementować ją od nowa. Ale nie zmieniasz testowanego fragmentu kodu na koncie oszczędnościowo-rozliczeniowym. To zaleta OOPS

Krok 1) Taki, że gdy „wycofana” metoda konta oszczędnościowego zostanie wywołana, zostanie wykonana metoda z klasy konta nadrzędnego.

Krok 2) Jednak gdy metoda „Wypłata” dla konta uprzywilejowanego (kredytu w rachunku bieżącym) zostanie wywołana metoda wycofania zdefiniowana w klasie uprzywilejowanej, zostanie wykonana. To jest polimorfizm.

Zastępowanie metody

Zastąpienie metody to przedefiniowanie metody superklasy w podklasie.

Reguły nadpisywania metod

  • Podpis metody, tj. Nazwa metody, lista parametrów i typ zwracanej wartości, muszą być dokładnie zgodne.
  • Zastąpiona metoda może poszerzyć dostępność, ale nie zawęzić jej, tj. Jeśli jest prywatna w klasie bazowej, klasa potomna może uczynić ją publiczną, ale nie odwrotnie.

Przykład

class Doctor{public void treatPatient(){// treatPatient method}class Surgeon extends Doctor{public void treatPatient(){// treatPatient method}}Class run{public static void main (String args[]){Doctor doctorObj = new Doctor()// treatPatient method in class Doctor will be executeddoctorObj.treatPatient();Surgeon surgeonObj = new Surgeon();// treatPatient method in class Surgeon will be executedsurgeonObj.treatPatient();}}

Różnica między przeciążaniem a zastępowaniem

Przeciążanie metod Zastępowanie metody

Przeciążanie metod znajduje się w tej samej klasie, w której więcej niż jedna metoda ma tę samą nazwę, ale różne podpisy.

Zastępowanie metod ma miejsce, gdy jedna z metod w superklasie jest przedefiniowana w podklasie. W tym przypadku podpis metody pozostaje taki sam.

Dawny:

void sum (int a , int b);void sum (int a , int b, int c);void sum (float a, double b);

Dawny:

class X{public int sum(){// some code}}class Y extends X{public int sum(){//overridden method//signature is same}}

Co to jest polimorfizm dynamiczny?

Dynamiczny polimorfizm to mechanizm, za pomocą którego można zdefiniować wiele metod o tej samej nazwie i sygnaturze w nadklasie i podklasie. Wywołanie zastąpionej metody jest rozwiązywane w czasie wykonywania.

Przykład dynamicznego polimorfizmu:

Zmienna referencyjna superklasy może odnosić się do obiektu podklasy

Doctor obj = new Surgeon();

Rozważ stwierdzenie

obj.treatPatient();

Tutaj zmienna odniesienia „obj” należy do klasy nadrzędnej, ale obiekt, na który wskazuje, należy do klasy potomnej (jak pokazano na diagramie).


obj.treatPatient () wykona metodę TreatPatient () podklasy - Surgeon

Jeśli do wywołania metody używane jest odwołanie do klasy bazowej, o metodzie, która ma zostać wywołana, decyduje JVM, w zależności od obiektu, na który wskazuje odwołanie.

Na przykład, mimo że obj jest odniesieniem do Doctor, wywołuje metodę Surgeon, ponieważ wskazuje na obiekt Surgeon

Jest to ustalane w czasie wykonywania i dlatego jest nazywane polimorfizmem dynamicznym lub polimorfizmem w czasie wykonywania

Super słowo kluczowe

Co się stanie, jeśli metoda TreatPatient w klasie Surgeon chce wykonać funkcjonalność zdefiniowaną w klasie Doctor, a następnie wykonać własną określoną funkcjonalność?
W tym przypadku słowo kluczowe

supermoże służyć do uzyskiwania dostępu do metod klasy nadrzędnej z klasy podrzędnej.
Metodę TreatPatient w klasie Surgeon można zapisać jako:
treatPatient(){super.treatPatient();//add code specific to Surgeon}

Słowo kluczowe super może służyć do uzyskiwania dostępu do dowolnego członka danych lub metod superklasy w podklasie.Przykład: -Aby nauczyć się dziedziczenia, polimorfizmu i słowa kluczowego super

Krok 1) Skopiuj poniższy kod do edytora

public class Test{public static void main(String args[]){X x= new X();Y y = new Y();y.m2();//x.m1();//y.m1();//x = y;// parent pointing to object of child//x.m1() ;//y.a=10;}}class X{private int a;int b;public void m1(){System.out.println("This is method m1 of class X");}}class Y extends X{int c; // new instance variable of class Ypublic void m1(){// overriden methodSystem.out.println("This is method m1 of class Y");}public void m2(){super.m1();System.out.println("This is method m2 of class Y");}}

Krok 2) Zapisz, skompiluj i uruchom kod. Obserwuj wyjście.
Krok 3) Odkomentuj wiersze # 6-9. Zapisz, skompiluj i uruchom kod. Obserwuj wyjście.
Krok 4) Odkomentuj wiersz nr 10. Zapisz i skompiluj kod.
Krok 5) Błąd =? Dzieje się tak, ponieważ podklasa nie ma dostępu do prywatnych członków superklasy.

Różnica między polimorfizmem statycznym i dynamicznym

Statyczny polimorfizm Dynamiczny polimorfizm
Dotyczy to przeciążania metod. Odnosi się do nadpisywania metody.

Ewentualne błędy są rozwiązywane w czasie kompilacji. Ponieważ kod nie jest wykonywany podczas kompilacji, stąd nazwa static.

Dawny:

void sum (int a , int b);void sum (float a, double b);int sum (int a, int b); //compiler gives error.

W przypadku, gdy zmienna referencyjna wywołuje przesłoniętą metodę, metoda, która ma zostać wywołana, jest określana przez obiekt, na który wskazuje zmienna referencyjna. Można to określić tylko w czasie wykonywania, gdy kod jest w trakcie wykonywania, stąd nazwa dynamiczna.

Dawny:

//reference of parent pointing to child objectDoctor obj = new Surgeon();// method of child calledobj.treatPatient();