Industriële fabricage
Industrieel internet der dingen | Industriële materialen | Onderhoud en reparatie van apparatuur | Industriële programmering |
home  MfgRobots >> Industriële fabricage >  >> Industrial programming >> Java

Java-polymorfisme

Java-polymorfisme

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

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

Rendering Square...
Rendering Circle...

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

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

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


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 Vierkant weer te geven en Omcirkel , respectievelijk.

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

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

Opmerking :De print() methode is ook een voorbeeld van polymorfisme. Het wordt gebruikt om waarden van verschillende typen af ​​te drukken, zoals char , int , string , enz.


We kunnen polymorfisme in Java op de volgende manieren bereiken:

  1. Methode overschrijven
  2. Overbelasting van methode
  3. Operator overbelast

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 methode overschrijven 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 overschrijven van methode

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();
  }
}

Uitvoer :

Java Programming Language
Common English Language

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

Het gebruik van displayInfo() is om de informatie af te drukken. Het drukt echter andere 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.

Opmerking :De methode die wordt aangeroepen wordt bepaald tijdens de uitvoering van het programma. Methode overschrijven is dus een run-time polymorfisme .


2. Java-methode overbelasten

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 bekend als overbelasting van de methode in Java. Hier voert dezelfde methode verschillende bewerkingen uit op basis van de parameter.

Voorbeeld 3:Polymorfisme met 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("\n");

    // call method with a single argument
    d1.display('#');
  }
}

Uitvoer :

**********

##########

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

// method with no arguments
display() {...}

// method with a single char type argument
display(char symbol) {...}

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

  • print een patroon van * . af , als er geen argument wordt doorgegeven of
  • drukt het patroon van de parameter af, als een enkele char type argument is doorgegeven.

Opmerking :De methode die wordt aangeroepen wordt bepaald door de compiler. Daarom wordt het ook wel compile-time polymorfisme genoemd.


3. Java-operator overbelast

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

  • + operator is overbelast om numerieke optellingen uit te voeren en tekenreeksen samen te voegen, en
  • operators zoals & , | , en ! zijn overbelast voor logische en bitsgewijze bewerkingen.

Laten we eens kijken hoe we polymorfisme kunnen bereiken door overbelasting van de operator te gebruiken.

De + operator wordt gebruikt om twee entiteiten toe te voegen. In Java is de + operator voert twee bewerkingen uit.

1. Wanneer + wordt gebruikt met getallen (gehele getallen en getallen met drijvende komma), het voert wiskundige optellingen uit. Bijvoorbeeld,

int a = 5;
int b = 6;

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

2. Wanneer we de + . gebruiken operator met strings, zal het stringconcatenatie uitvoeren (twee strings samenvoegen). Bijvoorbeeld,

String first = "Java ";
String second = "Programming";

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

Hier kunnen we zien dat de + operator is overbelast in Java om twee bewerkingen uit te voeren:toevoeging en aaneenschakeling .

Opmerking :In talen als C++ kunnen we operators definiëren om voor verschillende operanden anders te werken. Java ondersteunt echter geen door de gebruiker gedefinieerde overbelasting door operators.


Polymorfe variabelen

Een variabele wordt polymorf genoemd als deze verwijst naar verschillende waarden onder verschillende omstandigheden.

Objectvariabelen (instantievariabelen) vertegenwoordigen het gedrag van polymorfe variabelen in Java. Dit komt omdat objectvariabelen van een klasse zowel naar objecten van zijn klasse als naar objecten van zijn subklassen kunnen verwijzen.

Voorbeeld:polymorfe variabelen

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();
  }
}

Uitvoer :

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

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

  • In statement pl = new ProgrammingLanguage() , mv verwijzen naar het object van de ProgrammingLanguage klas.
  • En, in statement pl = new Java() , mv verwijzen naar het object van de Java klas.

Dit is een voorbeeld van upcasting in Java.


Java

  1. Java-operators
  2. Java-interface
  3. Java proberen-met-bronnen
  4. Java-annotaties
  5. Java-annotatietypen
  6. String Length() Methode in Java:Hoe te vinden met Voorbeeld
  7. Java String indexOf() Methode met Substring &Voorbeelden
  8. Java String charAt() Methode met Voorbeeld
  9. Java String endsWith() Methode met voorbeeld
  10. Java String Replace(), ReplaceAll() en ReplaceFirst() methode
  11. Java - Overschrijven