Polymorfisme in Java (Statisch en dynamisch)
โก Slimme samenvatting
Polymorfisme in Java Het maakt het mogelijk dat รฉรฉn interface meerdere vormen vertegenwoordigt, waardoor een enkele methodenaam zich anders gedraagt โโin gerelateerde klassen. Het is een pijler van objectgeoriรซnteerd ontwerp die flexibiliteit, hergebruik van code en een soepele uitbreiding van bestaande bank-, medische en bedrijfssystemen bevordert.

Waar zit polymorfisme in? Java?
Polymorfisme in Java Polymorfisme treedt op wanneer een of meer klassen of objecten via overerving aan elkaar verwant zijn. Het is het vermogen van een object om vele vormen aan te nemen. Overerving stelt gebruikers in staat attributen en methoden over te erven, terwijl polymorfisme deze methoden gebruikt om verschillende taken uit te voeren. Het doel is communicatie, hoewel de aanpak kan verschillen.
Een smartphone wordt bijvoorbeeld gebruikt voor communicatie. De communicatie kan plaatsvinden via een telefoongesprek, een sms-bericht, een fotobericht of een e-mail. Het doel is hetzelfde, namelijk communicatie, maar de aanpak verschilt. Dit gedrag vormt de essentie van... polymorfismeNu gaan we polymorfisme leren in Java met voorbeeldcode, diagrammen en stapsgewijze uitleg.
Klik hier als de video niet toegankelijk is
Waarom polymorfisme gebruiken in Java?
Polymorfisme in Java Dit patroon wordt gebruikt omdat het code flexibel, herbruikbaar en gemakkelijker te onderhouden maakt. Een enkele referentievariabele van een oudertype kan naar meerdere kindobjecten verwijzen, waardoor dezelfde aanroep zich aanpast aan elke subklasse die wordt gebruikt. Dit patroon zorgt ervoor dat geteste code ongewijzigd blijft, terwijl nieuw gedrag wordt toegevoegd via gespecialiseerde subklassen. Dit is precies de reden waarom frameworks zoals Spring en Jakarta EE er gebruik van maken.
Java Polymorfisme in OOP's met voorbeeld
Beschouw een ouderklasse genaamd Account met functies voor stortingen en opnames. De klasse Account heeft twee subklassen. De stortings- en opnameprocedure is hetzelfde voor spaar- en betaalrekeningen, dus de overgeรซrfde methoden van de klasse Account werken.
Java Polymorfisme voorbeeld
Verandering in softwarevereisten
Er is een wijziging in de specificatie van de vereisten, iets wat gebruikelijk is in de software-industrie. Functionaliteit voor een bevoorrechte bankrekening met een kredietfaciliteit moet worden toegevoegd. Een kredietfaciliteit stelt een klant in staat een bedrag op te nemen dat hoger is dan het beschikbare saldo op de rekening. De opnamemethode voor de bevoorrechte rekening moet opnieuw worden geรฏmplementeerd, terwijl de geteste code voor spaar- en betaalrekeningen ongewijzigd blijft. Die isolatie is het voordeel van... OOPS.
Stap 1) Wanneer de opnamemethode voor de spaarrekening wordt aangeroepen, wordt de methode uitgevoerd die is gedefinieerd in de bovenliggende Account-klasse.
Stap 2) Wanneer de opnamemethode voor de geprivilegieerde rekening (overtrekkingsfaciliteit) wordt aangeroepen, wordt de opnamemethode die in de geprivilegieerde klasse is gedefinieerd, uitgevoerd. Deze verzending is Polymorfisme in OOP.
Methode Overschrijven in Java
Methode-overriding is het proces waarbij een methode van de superklasse opnieuw wordt gedefinieerd binnen een subklasse. De subklasse behoudt dezelfde inhoud.tract, maar levert een nieuwe implementatie die wordt geselecteerd wanneer het programma wordt uitgevoerd.
Regels voor het overschrijven van methoden
- De methodesignatuur, dat wil zeggen de methodenaam, de parameterlijst en het retourtype, moet exact overeenkomen.
- De overschreven methode kan de toegankelijkheid vergroten, maar niet verkleinen. Als de methode privรฉ is in de basisklasse, kan de afgeleide klasse deze openbaar maken, maar niet andersom.
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 executed doctorObj.treatPatient(); Surgeon surgeonObj = new Surgeon(); // treatPatient method in class Surgeon will be executed surgeonObj.treatPatient(); } }
Verschil tussen method overloading en method overriding
Methode-overloading vindt plaats binnen dezelfde klasse met dezelfde methodenaam maar verschillende signaturen. Methode-overriding vindt plaats in een ouder-kindrelatie, waarbij de subklasse een methode herdefinieert die in de superklasse is gedeclareerd.
| Methode-overloading vindt plaats binnen dezelfde klasse, wanneer meerdere methoden dezelfde naam hebben maar verschillende signaturen. | Methode-overriding vindt plaats wanneer een van de methoden in de superklasse opnieuw wordt gedefinieerd in de subklasse. In dit geval blijft de signatuur 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 in objectgeoriรซnteerd programmeren is het mechanisme waarmee meerdere methoden met dezelfde naam en signatuur kunnen worden gedefinieerd in de superklasse en de subklasse. De aanroep van een overschreven methode wordt tijdens de uitvoering afgehandeld via dynamische binding binnen de JVM.
Dynamisch polymorfisme voorbeeld
Een referentievariabele van de superklasse kan verwijzen naar een object van de subklasse:
Doctor obj = new Surgeon();
Overweeg de volgende stelling:
obj.treatPatient();
Hier is de referentievariabele obj Het object waarnaar het verwijst, behoort tot de ouderklasse, maar het object waarnaar het verwijst, behoort tot de subklasse, zoals weergegeven in het diagram van polymorfisme.
Het telefoontje obj.treatPatient() zal de treatPatient()-methode van de subklasse Surgeon uitvoeren. Wanneer een referentie naar een basisklasse wordt gebruikt om een โโmethode aan te roepen, wordt de aangeroepen methode door de JVM bepaald op basis van het daadwerkelijke object waarnaar de referentie verwijst. Hoewel obj is een verwijzing naar Doctor; het roept de methode van Surgeon aan, omdat het naar een Surgeon-object wijst. De beslissing wordt tijdens de uitvoering genomen, vandaar de benaming. Dynamisch polymorfisme of runtime-polymorfisme.
Verschil tussen statisch en dynamisch polymorfisme
Statisch polymorfisme in Java Polymorfisme is een vorm van polymorfisme waarbij de informatie voor het aanroepen van een methode tijdens de compilatie wordt verzameld, terwijl dynamisch polymorfisme een vorm van polymorfisme is waarbij de informatie voor het aanroepen van een methode tijdens de uitvoering wordt verzameld.
| Het heeft te maken met method overloading. | Het heeft te maken met het overschrijven van methoden. |
| Eventuele fouten worden tijdens het compileren opgelost. Omdat de code niet wordt uitgevoerd tijdens het compileren, is de naam statisch.
ex: void sum (int a , int b); void sum (float a, double b); int sum (int a, int b); //compiler gives error. |
Wanneer een referentievariabele een overschreven methode aanroept, wordt de aan te roepen methode bepaald door het object waarnaar de referentievariabele verwijst. Dit kan alleen tijdens de uitvoering van de code worden vastgesteld, vandaar dat de naam dynamisch is.
ex: //reference of parent pointing to child object Doctor obj = new Surgeon(); // method of child called obj.treatPatient(); |
Supertrefwoord in Java
Wat als de `treatPatient`-methode in de `Surgeon`-klasse de functionaliteit van de `Doctor`-klasse wil uitvoeren en vervolgens zijn eigen specifieke gedrag wil vertonen? In dat geval is het sleutelwoord super kan worden gebruikt om methoden van de bovenliggende klasse te benaderen vanuit de onderliggende klasse. De treatPatient-methode in de Surgeon-klasse kan worden geschreven als:
treatPatient(){
super.treatPatient();
//add code specific to Surgeon
}
Het sleutelwoord `super` kan worden gebruikt om toegang te krijgen tot elk data-lid of elke methode van de superklasse binnen de subklasse. Vervolgens zullen we meer leren over het sleutelwoord `super`. Erfenisen polymorfisme in Java met voorbeeldprogramma's.
Voorbeeld: Om meer te leren over overerving, polymorfisme en het sleutelwoord `super`.
Stap 1) Kopieer de volgende code in 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 Y public void m1(){ // overridden method System.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) Sla de code op, compileer deze en voer hem uit. Bekijk de uitvoer.
Stap 3) Verwijder de commentaartekens bij regel 6 tot en met 9. Sla de code op, compileer en voer deze uit. Bekijk de uitvoer.
Stap 4) Verwijder het commentaar bij regel 10. Sla de code op en compileer deze.
Stap 5) Fout = ? Dit komt doordat de subklasse geen toegang heeft tot de private leden van de superklasse.





