logo

Polymorfisme op Java

Het woord polymorfisme betekent dat er vele vormen zijn. In eenvoudige bewoordingen kunnen we Java-polymorfisme definiëren als het vermogen van een bericht om in meer dan één vorm te worden weergegeven. In dit artikel zullen we leren wat polymorfisme is en wat het type is.

Real-life illustratie van polymorfisme op Java : Een persoon kan tegelijkertijd verschillende kenmerken hebben. Zoals een man tegelijkertijd vader, echtgenoot en werknemer is. Dezelfde persoon vertoont dus verschillend gedrag in verschillende situaties. Dit heet polymorfisme.

Wat is polymorfisme op Java?

Polymorfisme wordt beschouwd als een van de belangrijke kenmerken van objectgeoriënteerd programmeren. Polymorfisme stelt ons in staat een enkele actie op verschillende manieren uit te voeren. Met andere woorden, met polymorfisme kunt u één interface definiëren en meerdere implementaties hebben. Het woord poly betekent veel en morphs betekent vormen. Het betekent dus vele vormen.



Soorten Java-polymorfisme

Op Java is polymorfisme hoofdzakelijk verdeeld in twee typen:

  • Compile-time polymorfisme
  • Runtime-polymorfisme

Compile-time polymorfisme in Java

Het is ook bekend als statisch polymorfisme. Dit type polymorfisme wordt bereikt door overbelasting van functies of overbelasting van operators.

Opmerking: Maar Java ondersteunt Operator Overloading niet.

Java-polymorfisme

Methode Overbelasting

Als er meerdere functies zijn met dezelfde naam maar met verschillende parameters, dan wordt van deze functies gezegd dat ze dat zijn overbelast . Functies kunnen overbelast raken door veranderingen in het aantal argumenten en/en een verandering in het type argumenten.

Voorbeeld 1:

Java




// Java Program for Method overloading> // By using Different Types of Arguments> // Class 1> // Helper class> class> Helper {> >// Method with 2 integer parameters> >static> int> Multiply(>int> a,>int> b)> >{> >// Returns product of integer numbers> >return> a * b;> >}> >// Method 2> >// With same name but with 2 double parameters> >static> double> Multiply(>double> a,>double> b)> >{> >// Returns product of double numbers> >return> a * b;> >}> }> // Class 2> // Main class> class> GFG {> >// Main driver method> >public> static> void> main(String[] args)> >{> >// Calling method by passing> >// input as in arguments> >System.out.println(Helper.Multiply(>2>,>4>));> >System.out.println(Helper.Multiply(>5.5>,>6.3>));> >}> }>

>

>

Uitvoer

8 34.65>

Voorbeeld 2:

Java




onderstrepen in afwaardering
// Java program for Method Overloading> // by Using Different Numbers of Arguments> // Class 1> // Helper class> class> Helper {> >// Method 1> >// Multiplication of 2 numbers> >static> int> Multiply(>int> a,>int> b)> >{> >// Return product> >return> a * b;> >}> >// Method 2> >// // Multiplication of 3 numbers> >static> int> Multiply(>int> a,>int> b,>int> c)> >{> >// Return product> >return> a * b * c;> >}> }> // Class 2> // Main class> class> GFG {> >// Main driver method> >public> static> void> main(String[] args)> >{> >// Calling method by passing> >// input as in arguments> >System.out.println(Helper.Multiply(>2>,>4>));> >System.out.println(Helper.Multiply(>2>,>7>,>3>));> >}> }>

>

>

Uitvoer

8 42>

Subtypen van compilatietijdpolymorfisme

1. Functie Overbelasting

Het is een functie in C++ waarbij meerdere functies dezelfde naam kunnen hebben, maar met verschillende parameterlijsten. De compiler beslist welke functie moet worden aangeroepen op basis van het aantal en de typen argumenten die aan de functie worden doorgegeven.

2. Overbelasting van de machinist

Het is een functie in C++ waarbij operatoren zoals +, -, *, enz. extra betekenissen kunnen krijgen wanneer ze worden toegepast op door de gebruiker gedefinieerde gegevenstypen.

3. Sjabloon

het is een krachtige functie in C++ waarmee we generieke functies en klassen kunnen schrijven. Een sjabloon is een blauwdruk voor het maken van een familie van functies of klassen.

Runtime-polymorfisme in Java

Het is ook bekend als dynamische methodeverzending. Het is een proces waarbij een functieaanroep naar de overschreven methode tijdens Runtime wordt opgelost. Dit type polymorfisme wordt bereikt door Method Overriding. Methode overschrijven , aan de andere kant, treedt op wanneer een afgeleide klasse een definitie heeft voor een van de lidfuncties van de basisklasse. Er wordt gezegd dat die basisfunctie overridden .

Voorbeeld

Java




// Java Program for Method Overriding> // Class 1> // Helper class> class> Parent {> >// Method of parent class> >void> Print()> >{> >// Print statement> >System.out.println(>'parent class'>);> >}> }> // Class 2> // Helper class> class> subclass1>extends> Parent {> >// Method> >void> Print() { System.out.println(>'subclass1'>); }> }> // Class 3> // Helper class> class> subclass2>extends> Parent {> >// Method> >void> Print()> >{> >// Print statement> >System.out.println(>'subclass2'>);> >}> }> // Class 4> // Main class> class> GFG {> >// Main driver method> >public> static> void> main(String[] args)> >{> >// Creating object of class 1> >Parent a;> >// Now we will be calling print methods> >// inside main() method> >a =>new> subclass1();> >a.Print();> >a =>new> subclass2();> >a.Print();> >}> }>

>

>

Uitvoer

subclass1 subclass2>

Verklaring van de bovenstaande code:

Hier in dit programma wordt, wanneer een object van een onderliggende klasse wordt gemaakt, de methode binnen de onderliggende klasse aangeroepen. Dit komt omdat de methode in de bovenliggende klasse wordt overschreven door de onderliggende klasse. Omdat de methode wordt overschreven, heeft deze methode meer prioriteit dan de bovenliggende methode binnen de onderliggende klasse. Het lichaam binnen de onderliggende klasse wordt dus uitgevoerd.

Subtype van runtimepolymorfisme

i. Virtuele functies

Het zorgt ervoor dat een object van een afgeleide klasse zich kan gedragen alsof het een object van de basisklasse is. De afgeleide klasse kan de virtuele functie van de basisklasse overschrijven om zijn eigen implementatie te bieden. De functieaanroep wordt tijdens runtime opgelost, afhankelijk van het daadwerkelijke type object.

Diagram -

Soorten polymorfisme op Java

Polymorfisme in Java is een concept waarmee objecten van verschillende klassen kunnen worden behandeld als objecten van een gemeenschappelijke klasse. Het zorgt ervoor dat objecten zich anders kunnen gedragen op basis van hun specifieke klassetype.

Voordelen van polymorfisme op Java

  1. Vergroot de herbruikbaarheid van code doordat objecten van verschillende klassen kunnen worden behandeld als objecten van een gemeenschappelijke klasse.
  2. Verbetert de leesbaarheid en onderhoudbaarheid van code door de hoeveelheid code te verminderen die moet worden geschreven en onderhouden.
  3. Ondersteunt dynamische binding, waardoor de juiste methode tijdens runtime kan worden aangeroepen, op basis van de werkelijke klasse van het object.
  4. Zorgt ervoor dat objecten als één type kunnen worden behandeld, waardoor het gemakkelijker wordt om generieke code te schrijven die objecten van verschillende typen kan verwerken.

Nadelen van polymorfisme op Java

  1. Kan het moeilijker maken om het gedrag van een object te begrijpen, vooral als de code complex is.
  2. Dit kan tot prestatieproblemen leiden, omdat polymorf gedrag mogelijk extra berekeningen tijdens runtime vereist.