I denne veiledningen vil vi lære om Java polymorfisme og dens implementering ved hjelp av eksempler.
Polymorfisme er et viktig begrep for objektorientert programmering. Det betyr ganske enkelt mer enn én form.
Det vil si at den samme enheten (metode eller operatør eller objekt) kan utføre forskjellige operasjoner i forskjellige 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(); ) )
Produksjon
Rendering Square … Rendering Circle …
I eksemplet ovenfor har vi opprettet en superklasse: Polygon og to underklasser: Square og Circle. Legg merke til bruken av render()
metoden.
Hovedformålet med render()
metoden er å gjengi formen. Prosessen med å gjengi en firkant er imidlertid annerledes enn prosessen med å gjengi en sirkel.
Derfor render()
oppfører metoden seg annerledes i forskjellige klasser. Eller vi kan si render()
er polymorf.
Hvorfor polymorfisme?
Polymorfisme lar oss lage konsistent kode. I det forrige eksemplet kan vi også lage forskjellige metoder: renderSquare()
og renderCircle()
å gjengi henholdsvis Square og Circle.
Dette vil fungere perfekt. For hver form må vi imidlertid lage forskjellige metoder. Det vil gjøre koden vår inkonsekvent.
For å løse dette tillater polymorfisme i Java oss å lage en enkelt metode render()
som vil oppføre seg annerledes for forskjellige former.
Merk : print()
Metoden er også et eksempel på polymorfisme. Den brukes til å skrive ut verdier av forskjellige typer som char
, int
, string
, osv
Vi kan oppnå polymorfisme i Java på følgende måter:
- Metode Overstyring
- Metode Overbelastning
- Overbelastning av operatør
Java Method Overriding
Under samme arv i Java, hvis den samme metoden er tilstede i både superklassen og underklassen. Deretter overstyrer metoden i underklassen den samme metoden i superklassen. Dette kalles metodeoverstyring.
I dette tilfellet vil den samme metoden utføre en operasjon i superklassen og en annen operasjon i underklassen. For eksempel,
Eksempel 1: Polymorfisme ved bruk av 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(); ) )
Utgang :
Java-programmeringsspråk Vanlig engelsk språk
I eksemplet ovenfor har vi opprettet en superklasse som heter Language og en underklasse som heter Java. Her er metoden til displayInfo()
stede i både språk og Java.
Bruken av displayInfo()
er å skrive ut informasjonen. Imidlertid skriver den ut annen informasjon i språk og Java.
Basert på objektet som brukes til å kalle metoden, skrives den tilsvarende informasjonen ut.

Merk : Metoden som kalles bestemmes under gjennomføringen av programmet. Derfor er metodeoverstyring en polymorfisme i løpetid .
2. Overbelastning av Java-metoden
I en Java-klasse kan vi lage metoder med samme navn hvis de varierer i parametere. For eksempel,
void func() (… ) void func(int a) (… ) float func(double a) (… ) float func(int a, float b) (… )
Dette er kjent som metodeoverbelastning i Java. Her vil den samme metoden utføre forskjellige operasjoner basert på parameteren.
Eksempel 3: Polymorfisme ved bruk av 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('#'); ) )
Utgang :
********** ############
I eksemplet ovenfor har vi opprettet en klasse som heter Mønster. Klassen inneholder en metode display()
som er overbelastet.
// method with no arguments display() (… ) // method with a single char type argument display(char symbol) (… )
Her er hovedfunksjonen for display()
å skrive ut mønsteret. Basert på argumentene som er sendt, utfører metoden imidlertid forskjellige operasjoner:
- skriver ut et mønster av
*
, hvis ingen argumenter blir ført eller - skriver ut mønster av parameteren, hvis et enkelt
char
type argument sendes.
Merk : Metoden som kalles bestemmes av kompilatoren. Derfor er det også kjent som kompileringstidspolymorfisme.
3. Java-overbelastning
Noen operatører i Java oppfører seg annerledes med forskjellige operander. For eksempel,
+
operatøren er overbelastet for å utføre numerisk tillegg, så vel som streng sammenkobling, og- operatører liker
&
,|
og!
er overbelastet for logiske og bitvise operasjoner.
La oss se hvordan vi kan oppnå polymorfisme ved bruk av operatøroverbelastning.
Den +
operatør brukes til å legge til to enheter. I Java +
utfører operatøren imidlertid to operasjoner.
1. Når +
det brukes med tall (heltall og flytende tall), utfører det matematisk tillegg. For eksempel,
int a = 5; int b = 6; // + with numbers int sum = a + b; // Output = 11
2. Når vi bruker +
operatøren med strenger, vil den utføre streng sammenkobling (bli med to strenger). 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 eksemplet ovenfor har vi laget en objektvariabel pl av klassen ProgrammingLanguage. Her er pl en polymorf variabel. Dette er fordi,
- I uttalelse
pl = new ProgrammingLanguage()
, referer du til objektet til klassen ProgrammingLanguage. - Og, i uttalelsen
pl = new Java()
, referer du til objektet til Java-klassen.
Dette er et eksempel på oppkast i Java.