Wat is polymorfisme in Java?
Polymorfisme in Java treedt op wanneer er een of meer klassen of objecten zijn die door overerving aan elkaar zijn gerelateerd. Met andere woorden, het is het vermogen van een object om vele vormen aan te nemen. Overerving stelt gebruikers in staat attributen en methoden over te nemen, en polymorfisme gebruikt deze methoden voor het uitvoeren van verschillende taken. Het doel is dus communicatie, maar de aanpak is anders.
Je hebt bijvoorbeeld een smartphone voor communicatie. De communicatiemodus die u kiest, kan van alles zijn. Het kan een telefoontje zijn, een sms-bericht, een mms-bericht, e-mail, enz. Het doel is dus normaal, namelijk communicatie, maar hun aanpak is anders. Dit heet polymorfisme.
In deze tutorial leer je-
- Wat is polymorfisme?
- Java-polymorfisme in OOP's met voorbeeld
- Methode overschrijven
- Verschil tussen overbelasting en opheffing
- Wat is dynamisch polymorfisme?
- Super sleutelwoord
- Verschil tussen statisch en dynamisch polymorfisme
Klik hier als de video niet toegankelijk is
Java-polymorfisme in OOP's met voorbeeld
We hebben één bovenliggende klasse, 'Account' met de functie van storten en opnemen. Account heeft 2 kindklassen De werking van het storten en opnemen is hetzelfde voor spaar- en betaalrekeningen. Dus de overgeërfde methoden van de Account-klasse zullen werken.Verandering in softwarevereisten
Er is een verandering in de specificatie van de vereisten, iets dat zo gebruikelijk is in de software-industrie. Het is de bedoeling dat u een geprivilegieerde bankrekening met een kredietfaciliteit toevoegt.
Voor een achtergrond is rood staan een faciliteit waarbij u een hoger bedrag kunt opnemen dan het beschikbare saldo op uw rekening.
Dus verwijder de methode voor bevoorrechte behoeften die opnieuw moeten worden geïmplementeerd. Maar u verandert het geteste stukje code in de Spaar- en Betaalrekening niet. Dit is een voordeel van OOPS
Stap 1) Zodanig dat wanneer de "ingetrokken" methode voor spaarrekening wordt aangeroepen een methode uit de bovenliggende rekeningklasse wordt uitgevoerd.
Stap 2) Maar wanneer de "Opnemen" -methode voor de geprivilegieerde rekening (debetstand) wordt aangeroepen, wordt de opnamemethode die is gedefinieerd in de geprivilegieerde klasse uitgevoerd. Dit is polymorfisme.
Methode overschrijven
Method Overriding is het herdefiniëren van een superklasse-methode in een subklasse.
Regels voor het overschrijven van methoden
- De handtekening van de methode, dwz de naam van de methode, de parameterlijst en het retourneringstype, moeten exact overeenkomen.
- De overschreven methode kan de toegankelijkheid vergroten maar niet verkleinen, dwz als het privé is in de basisklasse, kan de kindklasse het openbaar maken, maar niet omgekeerd.
Voorbeeld
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();}}
Verschil tussen overbelasting en opheffing
Methode overbelasting | Methode overschrijven |
---|---|
Overbelasting van de methode bevindt zich in dezelfde klasse, waarbij meer dan één methode dezelfde naam heeft, maar verschillende handtekeningen. |
Methode overschrijven is wanneer een van de methoden in de superklasse opnieuw wordt gedefinieerd in de subklasse. In dit geval blijft de handtekening van de methode hetzelfde. |
Ex: void sum (int a , int b);void sum (int a , int b, int c);void sum (float a, double b); |
Ex: class X{public int sum(){// some code}}class Y extends X{public int sum(){//overridden method//signature is same}} |
Wat is dynamisch polymorfisme?
Dynamisch polymorfisme is het mechanisme waarmee meerdere methoden kunnen worden gedefinieerd met dezelfde naam en handtekening in de superklasse en subklasse. De aanroep naar een overschreven methode wordt tijdens runtime opgelost.
Voorbeeld van dynamisch polymorfisme:
Een referentievariabele van de superklasse kan verwijzen naar een subklasseobject
Doctor obj = new Surgeon();
Overweeg de verklaring
obj.treatPatient();
Hier is de referentievariabele "obj" van de bovenliggende klasse, maar het object waarnaar het verwijst, is van de kindklasse (zoals weergegeven in het diagram).
obj.treatPatient () zal de methode treatPatient () van de subklasse - Surgeon uitvoeren
Als een basisklasse-referentie wordt gebruikt om een methode aan te roepen, wordt de methode die moet worden aangeroepen, bepaald door de JVM, afhankelijk van het object waarnaar de referentie verwijst
Bijvoorbeeld, ook al is obj een verwijzing naar Doctor, het roept de methode Surgeon aan, omdat het verwijst naar een Surgeon-object
Dit wordt bepaald tijdens runtime en wordt daarom dynamisch of runtime polymorfisme genoemd
Super sleutelwoord
Wat moet ik doen als de methode treatPatient in de klasse Surgeon de functionaliteit wil uitvoeren die is gedefinieerd in de klasse Doctor en vervolgens zijn eigen specifieke functionaliteit wil uitvoeren?
In dit geval trefwoord
super
kan worden gebruikt om toegang te krijgen tot methoden van de bovenliggende klasse vanuit de onderliggende klasse.De methode treatPatient in de klasse Surgeon kan worden geschreven als:
treatPatient(){super.treatPatient();//add code specific to Surgeon}
Het sleutelwoord super kan worden gebruikt om toegang te krijgen tot elk gegevenslid of methoden van de superklasse in de subklasse.Voorbeeld: -Om overerving, polymorfisme en supersleutelwoord te leren
Stap 1) Kopieer de volgende code naar een 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");}}
Stap 2) Bewaar, compileer en voer de code uit. Bekijk de output.
Stap 3) Uncomments regels # 6-9. Bewaar, compileer en voer de code uit. Bekijk de output.
Stap 4) Uncomment-regel # 10. Bewaar en compileer de code.
Stap 5) Fout =? Dit komt omdat de subklasse geen toegang heeft tot privéleden van de superklasse.
Verschil tussen statisch en dynamisch polymorfisme
Statisch polymorfisme | Dynamisch polymorfisme |
---|---|
Het heeft betrekking op overbelasting van de methode. | Het heeft betrekking op het overschrijven van de methode. |
Eventuele fouten worden tijdens het compileren opgelost. Omdat de code niet wordt uitgevoerd tijdens het compileren, vandaar de naam static. Ex: void sum (int a , int b);void sum (float a, double b);int sum (int a, int b); //compiler gives error. |
In het geval dat een referentievariabele een overschreven methode aanroept, wordt de aan te roepen methode bepaald door het object waarnaar uw referentievariabele verwijst. Dit kan alleen tijdens runtime worden bepaald wanneer code wordt uitgevoerd, vandaar de naam dynamic. Ex: //reference of parent pointing to child objectDoctor obj = new Surgeon();// method of child calledobj.treatPatient(); |