A polimorfizmus típusai java-ban-futásidejű és fordítási idejű polimorfizmus

az utolsó oktatóanyagban a Java polimorfizmusát tárgyaltuk. Ebben az útmutatóban a polimorfizmus típusait fogjuk látni. Kétféle polimorfizmus van a java-ban:
1) statikus polimorfizmus, más néven fordítási idő polimorfizmus
2) dinamikus polimorfizmus, más néven futási idő polimorfizmus

fordítási idő polimorfizmus (vagy statikus polimorfizmus)

polimorfizmus, amelyet a fordító ideje alatt oldanak meg, statikus polimorfizmusnak nevezik. Módszer túlterhelés egy példa fordítási idő polimorfizmus.
metódus túlterhelés: ez lehetővé teszi, hogy egynél több metódus legyen azonos névvel, ha a metódusok paraméterei különböznek a paraméterek számában, sorrendjében és adattípusaiban. Itt már tárgyaltuk a módszer túlterhelését: ha nem olvasta ezt az útmutatót, olvassa el: módszer túlterhelése Java-ban

példa statikus Polimorfizmusra

módszer a túlterhelés az egyik módja annak, hogy a java támogatja a statikus polimorfizmust. Itt van két definíciója ugyanazt a módszert add (), amely add módszer lenne az úgynevezett határozza meg a paraméter lista a fordítási idő. Ez az oka annak, hogy ezt fordítási idő polimorfizmusnak is nevezik.

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

kimenet:

3060

futásidejű polimorfizmus (vagy dinamikus polimorfizmus)

dinamikus Módszerküldésnek is nevezik. A dinamikus polimorfizmus olyan folyamat, amelyben a felülbírált módszer hívása futásidőben megoldódik, ezért hívják futásidejű polimorfizmusnak. Már tárgyaltam módszer felülírása részletesen egy külön oktatóanyagban, olvassa el: módszer felülírása Java-ban.

példa
ebben a példában két ABC és XYZ osztályunk van. Az ABC egy szülő osztály, az XYZ pedig egy gyermek osztály. A gyermekosztály felülírja a szülőosztály mymethod() metódusát. Ebben a példában van gyermek osztály objektum hozzárendelve a szülő osztály hivatkozást, így annak érdekében, hogy melyik módszer hívható, a típus az objektum kerül meghatározásra futási időben. Az objektum típusa határozza meg, hogy a módszer melyik verzióját hívják meg (nem a Hivatkozás típusa).

a felülbírálás fogalmának megértéséhez rendelkeznie kell az öröklődés alapvető ismereteivel a Java-ban.

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

kimenet:

Overriding Method

ha egy felülbírált metódust a szülő osztály hivatkozásán keresztül hívunk meg, akkor az objektum típusa határozza meg, hogy melyik metódust kell végrehajtani. Így ez a meghatározás futási időben történik.
mivel mind az osztályok, mind a gyermek osztály és a szülő osztály ugyanazt a módszert használja animalSound. A módszer melyik verzióját (gyermekosztály vagy szülőosztály) hívják meg, futásidőben a JVM határozza meg.

néhány további nyomós példa:

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

a harmadik esetben a gyermek osztály metódusát kell végrehajtani, mert a végrehajtandó metódust az objektum típusa határozza meg, és mivel az objektum a gyermek osztályhoz tartozik, a mymethod() gyermek osztály verzióját hívják meg.

Vélemény, hozzászólás?

Az e-mail-címet nem tesszük közzé.

More: