Polymorfismus v OOP Java s příkladem

Obsah:

Anonim

Co je polymorfismus v Javě?

Polymorfismus v Javě nastává, když existuje jedna nebo více tříd nebo objektů navzájem souvisejících dědičností. Jinými slovy, je to schopnost objektu mít mnoho podob. Dědičnost umožňuje uživatelům zdědit atributy a metody a polymorfismus používá tyto metody k provádění různých úkolů. Cílem je tedy komunikace, ale přístup je jiný.

Například máte smartphone pro komunikaci. Zvolený komunikační režim může být cokoli. Může to být hovor, textová zpráva, obrazová zpráva, pošta atd. Společný cíl je tedy komunikace, ale jejich přístup je odlišný. Toto se nazývá polymorfismus.

V tomto výukovém programu se naučíte

  • Co je polymorfismus?
  • Polymorfismus Java v OOP s příkladem
  • Přepsání metody
  • Rozdíl mezi přetížením a přepsáním
  • Co je dynamický polymorfismus?
  • Super klíčové slovo
  • Rozdíl mezi statickým a dynamickým polymorfismem

Pokud video není přístupné, klikněte sem

Polymorfismus Java v OOP s příkladem

Máme jednu nadřazenou třídu, 'Účet' s funkcí vkladu a výběru. Účet má 2 podřízené třídy Činnost vkladu a výběru je stejná pro ukládání a kontrolu účtů. Takže zděděné metody z třídy účtu budou fungovat.

Změna softwarového požadavku

Došlo ke změně ve specifikaci požadavků, což je něco, co je v softwarovém průmyslu tak běžné. Měli byste přidat funkční privilegovaný bankovní účet s kontokorentním úvěrem.

Jako pozadí je kontokorent možnost, kde můžete vybrat částku vyšší, než je k dispozici zůstatek na vašem účtu.

Takže metoda výběru pro privilegované potřeby musí být implementována znovu. Ale nezměníte testovanou část kódu v účtu Úspory a kontrola. To je výhoda OOPS

Krok 1) Takový, že když se nazývá „stažená“ metoda ukládání účtu, provede se metoda z třídy nadřazeného účtu.

Krok 2) Ale když se metoda „Výběr“ pro privilegovaný účet (možnost přečerpání účtu) nazývá metoda výběru, provede se metoda definovaná v privilegované třídě. Toto je polymorfismus.

Přepsání metody

Metoda přepsání předefinuje metodu super třídy v podtřídě.

Pravidla pro přepsání metody

  • Podpis metody, tj. Název metody, seznam parametrů a návratový typ se musí přesně shodovat.
  • Přepsaná metoda může přístup rozšířit, ale ne zúžit, tj. Pokud je v základní třídě soukromá, může ji podřízená třída zveřejnit, ale ne naopak.

Příklad

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();}}

Rozdíl mezi přetížením a přepsáním

Přetížení metody Přepsání metody

Přetížení metody je ve stejné třídě, kde více než jedna metoda má stejný název, ale různé podpisy.

Přepsání metody je, když je v podtřídě předefinována jedna z metod v super třídě. V tomto případě zůstane podpis metody stejný.

Příklad:

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

Příklad:

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

Co je dynamický polymorfismus?

Dynamický polymorfismus je mechanismus, kterým lze definovat více metod se stejným názvem a podpisem v nadtřídě a podtřídě. Volání přepsané metody se vyřeší za běhu.

Příklad dynamického polymorfismu:

Referenční proměnná super třídy může odkazovat na objekt podtřídy

Doctor obj = new Surgeon();

Zvažte prohlášení

obj.treatPatient();

Zde je referenční proměnná „obj“ nadřazené třídy, ale objekt, na který ukazuje, je podřízené třídy (jak je znázorněno na obrázku).


obj.treatPatient () provede metodu treatPatient () podtřídy - Chirurg

Pokud se k volání metody používá odkaz na základní třídu, o metodě, která má být vyvolána, rozhodne JVM, v závislosti na objektu, na který odkaz odkazuje

Například, i když obj je odkaz na doktora, volá metodu chirurga, protože ukazuje na objekt chirurga

O tom se rozhoduje za běhu, a proto se nazývá dynamický nebo běhový polymorfismus

Super klíčové slovo

Co když metoda TreatPatient ve třídě Surgeon chce spustit funkce definované ve třídě Doctor a poté provést vlastní specifickou funkci?
V tomto případě klíčové slovo

superlze použít pro přístup k metodám nadřazené třídy z podřízené třídy.
Metodu TreatPatient ve třídě Surgeon lze napsat jako:
treatPatient(){super.treatPatient();//add code specific to Surgeon}

The keyword super can be used to access any data member or methods of the super class in the sub class.
Example:-To learn Inheritance, Polymorphism & super keyword

Step 1) Copy the following code into an Editor

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");}}

Step 2) Save, Compile & Run the code. Observe the output.
Step 3) Uncomments lines # 6-9. Save, Compile & Run the code. Observe the output.
Step 4) Uncomment line # 10 . Save & Compile the code.
Step 5) Error = ? This is because sub-class cannot access private members of the super class.

Difference between Static & Dynamic Polymorphism

Static Polymorphism Dynamic Polymorphism
It relates to method overloading. It relates to method overriding.

Chyby, pokud existují, jsou vyřešeny v době kompilace. Vzhledem k tomu, že kód není spuštěn během kompilace, proto je název statický.

Příklad:

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

V případě, že referenční proměnná volá přepsanou metodu, je metoda, která má být vyvolána, určena objektem, na který odkazuje vaše referenční proměnná. To je možné určit pouze za běhu, když je kód spuštěn, proto je název dynamický.

Příklad:

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