in de laatste tutorial hebben we polymorfisme in Java besproken. In deze gids zullen we soorten polymorfisme zien. Er zijn twee typen polymorfisme in java:
1) statisch polymorfisme ook bekend als compilatietijd polymorfisme
2) dynamisch polymorfisme ook bekend als runtime polymorfisme
Compilatietijd polymorfisme (of statisch polymorfisme)
polymorfisme dat tijdens de compilertijd wordt opgelost, staat bekend als statisch polymorfisme. Methode overloading is een voorbeeld van compilatietijd polymorfisme.
methode overbelasting: hierdoor kunnen we meer dan één methode met dezelfde naam hebben, als de parameters van methoden verschillend zijn in aantal, volgorde en gegevenstypes van parameters. We hebben Method overloading hier al besproken: als je die gids niet hebt gelezen, zie dan: Method Overloading in Java
voorbeeld van statisch polymorfisme
Method overloading is een van de manieren waarop java statisch polymorfisme ondersteunt. Hier hebben we twee definities van dezelfde methode add() die methode toevoegen zou worden aangeroepen wordt bepaald door de parameterlijst tijdens het compileren. Dat is de reden dat dit ook bekend staat als compilatietijd polymorfisme.
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)); }}
Output:
3060
Runtime polymorfisme (of dynamisch polymorfisme)
het is ook bekend als dynamische methode Dispatch. Dynamisch polymorfisme is een proces waarbij een aanroep naar een overgeschreven methode wordt opgelost tijdens runtime, daarom wordt het runtime polymorfisme genoemd. Ik heb al besproken methode overheersen in detail in een aparte tutorial, refereer het: Methode overheersen in Java.
voorbeeld
in dit voorbeeld hebben we twee klassen ABC en XYZ. ABC is een ouder klasse en XYZ is een kind klasse. De child class overschrijft de methode myMethod () van parent class. In dit voorbeeld hebben we een child class object toegewezen aan de ouder class referentie dus om te bepalen welke methode zou worden aangeroepen, het type van het object zou worden bepaald tijdens runtime. Het is het type object dat bepaalt welke versie van de methode wordt aangeroepen (niet het type referentie).
om het concept van overschrijven te begrijpen, moet u de basiskennis van overerving in Java hebben.
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(); }}
uitvoer:
Overriding Method
wanneer een overschrijdende methode wordt aangeroepen door middel van een referentie van de ouderklasse, bepaalt het type van het object welke methode moet worden uitgevoerd. Dus, deze bepaling wordt gemaakt op runtime.
omdat zowel de klassen, de kinderklasse als de ouderklasse dezelfde methode animalSound
hebben. Welke versie van de methode(child class of parent class) aangeroepen zal worden, wordt bepaald tijdens runtime door JVM.
weinig meer dwingende voorbeelden:
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
in het derde geval moet de methode van dochterklasse worden uitgevoerd omdat welke methode moet worden uitgevoerd wordt bepaald door het type object en omdat het object tot de dochterklasse behoort, wordt de dochterklasse-versie van myMethod() aangeroepen.