i den siste opplæringen diskuterte Vi Polymorfisme I Java. I denne veiledningen vil vi se typer polymorfisme. Det finnes to typer polymorfisme i java:
1) Statisk Polymorfisme også kjent som kompileringstid polymorfisme
2) Dynamisk Polymorfisme også kjent som runtime polymorfisme
Kompilertid Polymorfisme (Eller Statisk polymorfisme)
Polymorfisme som er løst under kompilatortiden er kjent som statisk polymorfisme. Metode overbelastning er et eksempel på kompileringstid polymorfisme.
Metode Overbelastning: Dette tillater oss å ha mer enn en metode med samme navn, hvis parametrene til metodene er forskjellige i antall, sekvens og datatyper av parametere. Vi har allerede diskutert Metode overbelastning her: Hvis du ikke leste den veiledningen, se: Metode Overbelastning I Java
Eksempel på statisk Polymorfisme
metode overbelastning er en av måtene java støtter statisk polymorfisme. Her har vi to definisjoner av samme metode add () som add-metoden ville bli kalt, bestemmes av parameterlisten på kompileringstidspunktet. Det er grunnen til at dette også er kjent som kompileringstid 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)); }}
Utgang:
3060
Runtime Polymorphism (Eller Dynamic polymorphism)
Det er også kjent Som Dynamic Method Dispatch. Dynamisk polymorfisme er en prosess der et kall til en overstyrt metode er løst ved kjøretid, derfor kalles det runtime polymorfisme. Jeg har allerede diskutert metode overordnet i detalj i en egen opplæring, se den: Metode Overordnet I Java.
Eksempel
I dette eksemplet har vi to klasser ABC og XYZ. ABC er en foreldreklasse OG XYZ er en barneklasse. Barneklassen overstyrer metoden myMethod () av foreldreklassen. I dette eksemplet har vi underordnet klasseobjekt tilordnet overordnet klassereferanse, slik at for å bestemme hvilken metode som skal kalles, vil objektets type bli bestemt ved kjøretid. Det er typen objekt som bestemmer hvilken versjon av metoden som skal kalles (ikke typen referanse).
for å forstå begrepet overordnet, bør du ha grunnleggende kunnskap 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(); }}
Utgang:
Overriding Method
når en overstyrt metode kalles gjennom en referanse av overordnet klasse, bestemmer objekttypen hvilken metode som skal utføres. Dermed er denne bestemmelsen gjort på kjøretid.
Siden både klassene, barneklassen og foreldreklassen har samme metode animalSound
. Hvilken versjon av metoden (barneklasse eller foreldreklasse) vil bli kalt, bestemmes ved kjøring av JVM.
Få flere overordnede eksempler:
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 tilfellet skal metoden for barneklasse utføres fordi hvilken metode som skal utføres, bestemmes av objekttypen og siden objektet tilhører barneklassen, kalles barneklasseversjonen av myMethod ().