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
super
lze 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(); |