Java-polymorfisme (met voorbeelden)

In deze tutorial leren we met behulp van voorbeelden over Java-polymorfisme en de implementatie ervan.

Polymorfisme is een belangrijk concept van objectgeoriënteerd programmeren. Het betekent gewoon meer dan één formulier.

Dat wil zeggen dat dezelfde entiteit (methode of operator of object) verschillende bewerkingen kan uitvoeren in verschillende scenario's.

Voorbeeld: Java-polymorfisme

 class Polygon ( // method to render a shape public void render() ( System.out.println("Rendering Polygon… "); ) ) class Square extends Polygon ( // renders Square public void render() ( System.out.println("Rendering Square… "); ) ) class Circle extends Polygon ( // renders circle public void render() ( System.out.println("Rendering Circle… "); ) ) class Main ( public static void main(String() args) ( // create an object of Square Square s1 = new Square(); s1.render(); // create an object of Circle Circle c1 = new Circle(); c1.render(); ) )

Uitvoer

 Vierkant weergeven … Cirkel weergeven … 

In het bovenstaande voorbeeld hebben we een superklasse gemaakt: Polygoon en twee subklassen: Vierkant en Cirkel. Let op het gebruik van de render()methode.

Het belangrijkste doel van de render()methode is om de vorm weer te geven. Het renderen van een vierkant is echter anders dan het renderen van een cirkel.

Daarom render()gedraagt de methode zich anders in verschillende klassen. Of we kunnen zeggen dat het render()polymorf is.

Waarom polymorfisme?

Polymorfisme stelt ons in staat om consistente code te creëren. In het vorige voorbeeld kunnen we ook verschillende methoden maken: renderSquare()en renderCircle()om respectievelijk vierkant en cirkel weer te geven.

Dit zal perfect werken. Voor elke vorm moeten we echter verschillende methoden creëren. Het zal onze code inconsistent maken.

Om dit op te lossen, stelt polymorfisme in Java ons in staat om een ​​enkele methode te creëren render()die zich anders zal gedragen voor verschillende vormen.

Opmerking : de print()methode is ook een voorbeeld van polymorfisme. Het wordt gebruikt om de waarden van verschillende types zoals print char, int, string, etc.

We kunnen polymorfisme in Java bereiken op de volgende manieren:

  1. Methode overschrijven
  2. Methode overbelasting
  3. Operator overbelasting

Java-methode overschrijven

Tijdens overerving in Java, als dezelfde methode aanwezig is in zowel de superklasse als de subklasse. Vervolgens overschrijft de methode in de subklasse dezelfde methode in de superklasse. Dit wordt het overschrijven van een methode genoemd.

In dit geval voert dezelfde methode één bewerking uit in de superklasse en een andere bewerking in de subklasse. Bijvoorbeeld,

Voorbeeld 1: Polymorfisme met behulp van methode-overschrijving

 class Language ( public void displayInfo() ( System.out.println("Common English Language"); ) ) class Java extends Language ( @Override public void displayInfo() ( System.out.println("Java Programming Language"); ) ) class Main ( public static void main(String() args) ( // create an object of Java class Java j1 = new Java(); j1.displayInfo(); // create an object of Language class Language l1 = new Language(); l1.displayInfo(); ) )

Uitgang :

 Java-programmeertaal Gemeenschappelijke Engelse taal

In het bovenstaande voorbeeld hebben we een superklasse gemaakt met de naam Language en een subklasse met de naam Java. Hier is de methode displayInfo()aanwezig in zowel taal als Java.

Het gebruik van displayInfo()is om de informatie af te drukken. Het drukt echter verschillende informatie af in Taal en Java.

Op basis van het object dat wordt gebruikt om de methode aan te roepen, wordt de bijbehorende informatie afgedrukt.

Werking van Java-polymorfisme

Opmerking : de methode die wordt aangeroepen, wordt bepaald tijdens de uitvoering van het programma. Daarom is het overschrijven van methoden een run-time polymorfisme .

2. Overbelasting van de Java-methode

In een Java-klasse kunnen we methoden met dezelfde naam maken als ze verschillen in parameters. Bijvoorbeeld,

 void func() (… ) void func(int a) (… ) float func(double a) (… ) float func(int a, float b) (… )

Dit staat in Java bekend als methode-overbelasting. Hier voert dezelfde methode verschillende bewerkingen uit op basis van de parameter.

Voorbeeld 3: Polymorfisme met behulp van overbelasting van de methode

 class Pattern ( // method without parameter public void display() ( for (int i = 0; i < 10; i++) ( System.out.print("*"); ) ) // method with single parameter public void display(char symbol) ( for (int i = 0; i < 10; i++) ( System.out.print(symbol); ) ) ) class Main ( public static void main(String() args) ( Pattern d1 = new Pattern(); // call method without any argument d1.display(); System.out.println(""); // call method with a single argument d1.display('#'); ) )

Uitgang :

 ********** ##########

In het bovenstaande voorbeeld hebben we een klasse gemaakt met de naam Pattern. De klasse bevat een methode met de naam display()die overbelast is.

 // method with no arguments display() (… ) // method with a single char type argument display(char symbol) (… )

Hier is de belangrijkste functie display()om het patroon af te drukken. Op basis van de doorgegeven argumenten voert de methode echter verschillende bewerkingen uit:

  • drukt een patroon af van *, als er geen argument wordt doorgegeven of
  • drukt het patroon van de parameter af als een enkel chartype argument wordt doorgegeven.

Opmerking : de methode die wordt aangeroepen, wordt bepaald door de compiler. Daarom is het ook bekend als compilatietijdpolymorfisme.

3. Overbelasting van Java-operators

Sommige operators in Java gedragen zich anders met verschillende operanden. Bijvoorbeeld,

  • + operator is overloaded to perform numeric addition as well as string concatenation, and
  • operators like &, |, and ! are overloaded for logical and bitwise operations.

Let's see how we can achieve polymorphism using operator overloading.

The + operator is used to add two entities. However, in Java, the + operator performs two operations.

1. When + is used with numbers (integers and floating-point numbers), it performs mathematical addition. For example,

 int a = 5; int b = 6; // + with numbers int sum = a + b; // Output = 11

2. When we use the + operator with strings, it will perform string concatenation (join two strings). For example,

 String first = "Java "; String second = "Programming"; // + with strings name = first + second; // Output = Java Programming

Here, we can see that the + operator is overloaded in Java to perform two operations: addition and concatenation.

Note: In languages like C++, we can define operators to work differently for different operands. However, Java doesn't support user-defined operator overloading.

Polymorphic Variables

A variable is called polymorphic if it refers to different values under different conditions.

Object variables (instance variables) represent the behavior of polymorphic variables in Java. It is because object variables of a class can refer to objects of its class as well as objects of its subclasses.

Example: Polymorphic Variables

 class ProgrammingLanguage ( public void display() ( System.out.println("I am Programming Language."); ) ) class Java extends ProgrammingLanguage ( @Override public void display() ( System.out.println("I am Object-Oriented Programming Language."); ) ) class Main ( public static void main(String() args) ( // declare an object variable ProgrammingLanguage pl; // create object of ProgrammingLanguage pl = new ProgrammingLanguage(); pl.display(); // create object of Java class pl = new Java(); pl.display(); ) )

Output:

 I am Programming Language. I am Object-Oriented Programming Language.

In het bovenstaande voorbeeld hebben we een objectvariabele pl gemaakt van de klasse ProgrammingLanguage. Hier is pl een polymorfe variabele. Dit is zo omdat,

  • In statement pl = new ProgrammingLanguage()verwijst pl naar het object van de klasse ProgrammingLanguage.
  • En, in statement pl = new Java(), verwijst pl naar het object van de Java-klasse.

Dit is een voorbeeld van upcasting in Java.

Interessante artikelen...