Typer av polymorfism i java-Runtime och kompileringstid polymorfism

i den senaste handledningen diskuterade vi polymorfism i Java. I den här guiden kommer vi att se typer av polymorfism. Det finns två typer av polymorfism i java:
1) statisk polymorfism även känd som kompileringstid polymorfism
2) dynamisk polymorfism även känd som runtime polymorfism

kompileringstid polymorfism (eller statisk polymorfism)

polymorfism som löses under kompilatortiden kallas statisk polymorfism. Metod överbelastning är ett exempel på kompileringstid polymorfism.
metod överbelastning: detta gör att vi kan ha mer än en metod med samma namn, om parametrarna för metoder är olika i antal, sekvens och datatyper av parametrar. Vi har redan diskuterat metod överbelastning här: om du inte läste den guiden, se: metod överbelastning i Java

exempel på statisk polymorfism

metod överbelastning är ett av de sätt java stöder statisk polymorfism. Här har vi två definitioner av samma metod add () som add metod skulle kallas bestäms av parameterlistan vid kompileringstiden. Det är anledningen till att detta också kallas kompileringstid polymorfism.

class SimpleCalculator{ int add(int a, int b) { return a+b; } int add(int a, int b, int c) { return a+b+c; }}public class Demo{ public static void main(String args) { SimpleCalculator obj = new SimpleCalculator(); System.out.println(obj.add(10, 20)); System.out.println(obj.add(10, 20, 30)); }}

utgång:

3060

Runtime polymorfism (eller dynamisk polymorfism)

det är också känt som dynamisk method Dispatch. Dynamisk polymorfism är en process där ett samtal till en åsidosatt metod löses vid körning, det är därför det kallas runtime polymorfism. Jag har redan diskuterat metod som åsidosätter i detalj i en separat handledning, hänvisa den: metod som åsidosätter i Java.

exempel
i det här exemplet har vi två klasser ABC och XYZ. ABC är en föräldraklass och XYZ är en barnklass. Barnklassen åsidosätter metoden myMethod() i föräldraklassen. I det här exemplet har vi barnklassobjekt tilldelat förälderklassreferensen så för att bestämma vilken metod som skulle kallas, skulle typen av objektet bestämmas vid körtid. Det är typen av objekt som bestämmer vilken version av metoden som skulle kallas (inte typen av referens).

för att förstå begreppet övergripande bör du ha grundläggande kunskaper om arv i Java.

class ABC{ public void myMethod(){System.out.println("Overridden Method"); }}public class XYZ extends ABC{ public void myMethod(){System.out.println("Overriding Method"); } public static void main(String args){ABC obj = new XYZ();obj.myMethod(); }}

utgång:

Overriding Method

när en åsidosatt metod anropas genom en referens av överordnad klass, bestämmer typen av objektet vilken metod som ska utföras. Således görs denna bestämning vid körtid.
eftersom både klasserna, barnklassen och föräldraklassen har samma metod animalSound. Vilken version av metoden (barnklass eller föräldraklass) kommer att anropas bestäms vid körning av JVM.

några fler övergripande exempel:

ABC obj = new ABC();obj.myMethod();// This would call the myMethod() of parent class ABCXYZ obj = new XYZ();obj.myMethod();// This would call the myMethod() of child class XYZABC obj = new XYZ();obj.myMethod();// This would call the myMethod() of child class XYZ

i det tredje fallet ska metoden för barnklass utföras eftersom vilken metod som ska utföras bestäms av typen av objekt och eftersom objektet tillhör barnklassen kallas barnklassversionen av myMethod ().

Lämna ett svar

Din e-postadress kommer inte publiceras.

More: