V minulém tutoriálu jsme diskutovali Polymorfismus v Javě. V této příručce uvidíme typy polymorfismu. Existují dva druhy polymorfismus v javě:
1) Statický Polymorfismus také známý jako kompilaci polymorfismus
2) Dynamický Polymorfismus také známý jako runtime polymorfismus
Kompilaci Polymorfismus (nebo Statický polymorfismus)
Polymorfismus, který je vyřešen během kompilátor době je známý jako statický polymorfismus. Metoda overloading je příkladem polymorfismu doby kompilace.
metoda přetížení: to nám umožňuje mít více než jednu metodu se stejným názvem, pokud se parametry metod liší počtem, sekvencí a datovými typy parametrů. Jsme již diskutovali Metoda přetížení: Pokud jste nečetl, že průvodce, viz: Metoda Přetížení v Java
Příklad statický Polymorfismus
Metoda přetížení je jedním z způsob, java podporuje statický polymorfismus. Zde máme dvě definice stejné metody add (), která by byla vyvolána metodou add, je určena seznamem parametrů v době kompilace. To je důvod, proč se to také nazývá polymorfismus doby kompilace.
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)); }}
výstup:
3060
Runtime polymorfismus (nebo dynamický polymorfismus)
je také známý jako dynamická metoda odeslání. Dynamický polymorfismus je proces, ve kterém je volání na přepsanou metodu vyřešeno za běhu, proto se nazývá runtime polymorfismus. Již jsem podrobně diskutoval o přepsání metody v samostatném tutoriálu, viz: přepsání metody v Javě.
příklad
v tomto příkladu máme dvě třídy ABC a XYZ. ABC je rodičovská třída A XYZ je podřízená třída. Podřízená třída převažuje nad metodou myMethod () nadřazené třídy. V tomto příkladu máme objekt podřízené třídy přiřazen k odkazu nadřazené třídy, takže abychom určili, která metoda by byla volána, typ objektu by byl určen za běhu. Je to typ objektu, který určuje, která verze metody by byla volána(nikoli typ odkazu).
Chcete-li pochopit pojem přepsání, měli byste mít základní znalosti o dědičnosti v Javě.
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(); }}
výstup:
Overriding Method
Když je přepsána metoda je volána prostřednictvím odkazu z nadřazené třídy, pak typ objektu určuje, která metoda má být popraven. Toto určení se tedy provádí v době běhu.
protože obě třídy, podřízená třída I rodičovská třída mají stejnou metodu animalSound
. Která verze metody (podřízená třída nebo nadřazená třída) bude volána, je určena za běhu JVM.
několik dalších převažujících příkladů:
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
Ve třetím případě metoda dítě třídy má být popraven, protože, která metoda má být popraven, je určen typ objektu a od objektu patří dítě, třída, dítě, třída verzi myMethod() je volána.