Java polymorfisme (med eksempler)

I denne vejledning lærer vi om Java polymorfisme og dens implementering ved hjælp af eksempler.

Polymorfisme er et vigtigt begreb med objektorienteret programmering. Det betyder simpelthen mere end en form.

Det vil sige, at den samme enhed (metode eller operatør eller objekt) kan udføre forskellige operationer i forskellige scenarier.

Eksempel: 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(); ) )

Produktion

 Rendering Square … Rendering Circle … 

I eksemplet ovenfor har vi oprettet en superklasse: Polygon og to underklasser: Square og Circle. Bemærk brugen af render()metoden.

Metodens hovedformål render()er at gengive formen. Processen med at gengive en firkant er imidlertid en anden end processen med at gengive en cirkel.

Derfor render()opfører metoden sig forskelligt i forskellige klasser. Eller vi kan sige, at det render()er polymorf.

Hvorfor polymorfisme?

Polymorfisme giver os mulighed for at skabe ensartet kode. I det foregående eksempel kan vi også oprette forskellige metoder: renderSquare()og renderCircle()at gengive henholdsvis Square og Circle.

Dette fungerer perfekt. For hver form er vi dog nødt til at oprette forskellige metoder. Det vil gøre vores kode inkonsekvent.

For at løse dette giver polymorfisme i Java os mulighed for at oprette en enkelt metode render(), der opfører sig forskelligt i forskellige former.

Bemærk : print()Metoden er også et eksempel på polymorfisme. Det bruges til at udskrive værdier af forskellige typer gerne char, int, string, etc.

Vi kan opnå polymorfisme i Java på følgende måder:

  1. Metode tilsidesættelse
  2. Metode Overbelastning
  3. Operatør Overbelastning

Java-metode tilsidesat

Under samme arv i Java, hvis den samme metode er til stede i både superklassen og underklassen. Derefter tilsidesætter metoden i underklassen den samme metode i superklassen. Dette kaldes metodeoverstyring.

I dette tilfælde udfører den samme metode en operation i superklassen og en anden operation i underklassen. For eksempel,

Eksempel 1: Polymorfisme ved hjælp af metodeoverstyring

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

Output :

 Java-programmeringssprog Fælles engelsk sprog

I ovenstående eksempel har vi oprettet en superklasse ved navn Language og en underklasse ved navn Java. Her er metoden til displayInfo()stede i både sprog og Java.

Brugen af displayInfo()er at udskrive oplysningerne. Det udskriver dog forskellige oplysninger i sprog og Java.

Baseret på det objekt, der bruges til at kalde metoden, udskrives den tilsvarende information.

Arbejde med Java polymorfisme

Bemærk : Den metode, der kaldes, bestemmes under udførelsen af ​​programmet. Derfor er metoden tilsidesat en run-time polymorfisme .

2. Java-metode Overbelastning

I en Java-klasse kan vi oprette metoder med samme navn, hvis de adskiller sig i parametre. For eksempel,

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

Dette er kendt som metodeoverbelastning i Java. Her udfører den samme metode forskellige operationer baseret på parameteren.

Eksempel 3: Polymorfisme ved anvendelse af metodeoverbelastning

 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('#'); ) )

Output :

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

I ovenstående eksempel har vi oprettet en klasse med navnet Mønster. Klassen indeholder en metode, display()der er navngivet, og som er overbelastet.

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

Her er hovedfunktionen for display()at udskrive mønsteret. Baseret på de argumenter, der er sendt, udfører metoden imidlertid forskellige operationer:

  • udskriver et mønster af *, hvis der ikke er bestået noget argument eller
  • udskriver mønster for parameteren, hvis et enkelt chartype argument overføres.

Bemærk : Den metode, der kaldes, bestemmes af kompilatoren. Derfor er det også kendt som kompileringstidspolymorfisme.

3. Overbelastning af Java-operatør

Nogle operatører i Java opfører sig forskelligt med forskellige operander. For eksempel,

  • + operatør er overbelastet til at udføre numerisk tilføjelse samt streng sammenkædning, og
  • operatører kan lide &, |og !er overbelastet til logiske og bitvise operationer.

Lad os se, hvordan vi kan opnå polymorfisme ved hjælp af operatøroverbelastning.

Den +operatør bruges til at tilføje to enheder. I Java +udfører operatøren dog to operationer.

1. Når +det bruges med tal (heltal og flydende tal), udfører det matematisk tilføjelse. For eksempel,

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

2. Når vi bruger +operatøren med strenge, udfører den streng sammenkædning (sammenføj to strenge). For eksempel,

 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.

I ovenstående eksempel har vi oprettet en objektvariabel pl af klassen ProgrammingLanguage. Her er pl en polymorf variabel. Dette er fordi,

  • I erklæring pl = new ProgrammingLanguage()henvises til objektet til klassen ProgrammingLanguage.
  • Og i erklæringen pl = new Java()henvises til objektet til Java-klassen.

Dette er et eksempel på upcasting i Java.

Interessante artikler...