logo

Polymorfism i Java

Ordet polymorfism betyder att ha många former. I enkla ord kan vi definiera Java Polymorphism som förmågan hos ett meddelande att visas i mer än en form. I den här artikeln kommer vi att lära oss vad som är polymorfism och dess typ.

Verklig illustration av polymorfism i Java : En person på samma gång kan ha olika egenskaper. Som att en man på samma gång är en far, en man och en anställd. Så samma person har olika beteenden i olika situationer. Detta kallas polymorfism.

Vad är polymorfism i Java?

Polymorfism anses vara en av de viktiga egenskaperna hos objektorienterad programmering. Polymorfism gör att vi kan utföra en enda handling på olika sätt. Med andra ord låter polymorfism dig definiera ett gränssnitt och ha flera implementeringar. Ordet poly betyder många och morphs betyder former, så det betyder många former.



Typer av Java-polymorfism

I Java är polymorfism huvudsakligen uppdelad i två typer:

  • Kompileringstidspolymorfism
  • Runtime polymorfism

Kompileringstidspolymorfism i Java

Det är också känt som statisk polymorfism. Denna typ av polymorfism uppnås genom funktionsöverbelastning eller operatörsöverbelastning.

Notera: Men Java stöder inte operatörsöverbelastning.

Java polymorfism

Metod Överbelastning

När det finns flera funktioner med samma namn men olika parametrar sägs dessa funktioner vara det överbelastad . Funktioner kan överbelastas av ändringar i antalet argument eller/och en förändring av typen av argument.

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

>

>

Produktion

8 34.65>

Exempel 2:

Java




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

>

>

Produktion

8 42>

Undertyper av kompileringstidspolymorfism

1. Funktion Överbelastning

Det är en funktion i C++ där flera funktioner kan ha samma namn men med olika parameterlistor. Kompilatorn kommer att bestämma vilken funktion som ska anropas baserat på antalet och typerna av argument som skickas till funktionen.

2. Operatör överbelastning

Det är en funktion i C++ där operatorerna som +, -, *, etc. kan ges ytterligare betydelser när de tillämpas på användardefinierade datatyper.

3. Mall

det är en kraftfull funktion i C++ som låter oss skriva generiska funktioner och klasser. En mall är en ritning för att skapa en familj av funktioner eller klasser.

Runtime Polymorphism i Java

Det är också känt som Dynamic Method Dispatch. Det är en process där ett funktionsanrop till den åsidosatta metoden löses vid Runtime. Denna typ av polymorfism uppnås genom metodöverstyrning. Metod åsidosättande , å andra sidan, inträffar när en härledd klass har en definition för en av medlemsfunktionerna i basklassen. Den basfunktionen sägs vara åsidosatt .

Exempel

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

>

arrayer java
>

Produktion

subclass1 subclass2>

Förklaring av ovanstående kod:

Här i det här programmet, när ett objekt av en underordnad klass skapas, anropas metoden i underklassen. Detta beror på att metoden i den överordnade klassen åsidosätts av den underordnade klassen. Eftersom metoden åsidosätts har denna metod högre prioritet än den överordnade metoden i den underordnade klassen. Så kroppen i barnklassen avrättas.

Undertyp av Run-time Polymorphism

i. Virtuella funktioner

Det tillåter ett objekt av en härledd klass att bete sig som om det vore ett objekt av basklassen. Den härledda klassen kan åsidosätta basklassens virtuella funktion för att tillhandahålla sin egen implementering. Funktionsanropet löses vid körning, beroende på den faktiska typen av objekt.

Diagram -

Typer av polymorfism i Java

Polymorfism i Java är ett koncept som gör att objekt av olika klasser kan behandlas som objekt av en gemensam klass. Det gör det möjligt för objekt att bete sig annorlunda baserat på deras specifika klasstyp.

Fördelar med polymorfism i Java

  1. Ökar kodåteranvändbarhet genom att tillåta att objekt av olika klasser behandlas som objekt av en gemensam klass.
  2. Förbättrar läsbarhet och underhållbarhet av kod genom att minska mängden kod som behöver skrivas och underhållas.
  3. Stöder dynamisk bindning, vilket gör att rätt metod kan anropas under körning, baserat på objektets faktiska klass.
  4. Gör att objekt kan behandlas som en enda typ, vilket gör det lättare att skriva generisk kod som kan hantera objekt av olika typer.

Nackdelar med polymorfism i Java

  1. Kan göra det svårare att förstå ett objekts beteende, speciellt om koden är komplex.
  2. Detta kan leda till prestandaproblem, eftersom polymorft beteende kan kräva ytterligare beräkningar vid körning.