Indholdsfortegnelse
Dette er anden del af en række selvstudier med fokus på at gennemgå de grundlæggende emner i Java -sproget for at forberede læseren i brugen af Spring Framework. Den første del af denne tutorial -serie kan findes her. I denne vejledning taler vi om polymorfisme.Ordet polymorfisme stammer fra det græske "poly", der betyder mange og "morpho", hvilket betyder form og generelt er det det, det refererer til, evnen til at antage flere former. I objektorienteret programmering taler vi om variabler eller referencer, der kan have form af flere forskellige objekter.
Nu hvor du ved, hvor konceptet kommer fra, lad os prøve at relatere det til Java -sproget. Som vi så i den foregående vejledning, tillader begrebet "arv" os at etablere et forælder-barn-forhold mellem 2 private klasser:

I dette eksempel er arverelationen mellem klassen Hund og klassen Dyr, klasse Kat og klassen Dyr og klassen Hest og klassen Dyr, bemærk at mellem Hund, Kat Y Hest der er ikke noget direkte forhold.
Ved at bruge dette diagram som grundlag kan vi sige, at en hund ER et dyr, en kat er et dyr og en hest er et dyr. Når du kan udtrykke forholdet på den måde i Java, kan vi sige, at en variabel af klassen Dyr er polymorf, da det kan have form af et Hest, af en Kat eller a Hund.
I den foregående vejledning så vi også, at ALLE klasser arver direkte eller indirekte fra klassen Objekt, i dette tilfælde er diagrammet lidt mere komplet, hvis vi definerer det sådan:

Og dette kan udvides flere niveauer ned (Grundlæggende vil niveauhætten afhænge af din JVM, men er normalt over 40) Så et dyr ER et objekt, en kat ER et dyr og en kat (ved transitivitet) ER et objekt.
Java giver dig derefter mulighed for at bruge klassereferencer på høje punkter i denne struktur til at pege på objekter under dem i strukturen. For eksempel:
public static void main (String [] args) {Object o1 = new Object (); Dyr a1 = nyt dyr (); Hund p = ny hund (); o1 = a1; o1 = p; a1 = p; Objekt o2 = nyt dyr (); Objekt o3 = ny hund (); Dyr a2 = ny hund (); boolsk b1 = o1 == o2; boolsk b2 = o1 == o3; boolsk b3 = o1 == a2; hvis (b1 || b2 || b3) {DoNothing (); }}
Som du kan se, kan en objektvariabel referere til et dyreobjekt eller et hundeobjekt, ligesom en dyrvariabel kan referere til et hundeobjekt. Den polymorfiske kapacitet, der stammer fra dette, fører os til at være i stand til at manipulere et objekt uden at skulle vide præcis, hvad objektet ER, lad os se følgende eksempelmetode:
offentligt statisk tomrum doSomething (Animal a) {a.getColorDePelo (); }
Når et program bruger denne metode, ved det ikke, hvilket dyr det modtager efter parameter, det kan være en hund, det kan være en kat, det kan være en hest eller senere en muldvarp, en elefant, en mandrill eller enhver anden klasse, der er af dyretypen.
Nøglen til denne egenskab er, at det giver programmet mulighed for at bruge metoder for visse underklasser uden specifikt at vide, hvilken type dyr det er og dermed opretholde et betydeligt abstraktionsniveau med hensyn til fremtidige implementeringer af dyreklassen.
I den næste tutorial vil vi gå mere dybt ind i emnet polymorfisme, vi vil se, hvad grænseflader er, og hvordan man programmerer fokuseret på grænseflader, hvilket vil hjælpe med at forstå de følgende tutorials.
Emnet er blevet lidt længere, end jeg havde forventet, men fortvivl ikke! Det er vigtigt at forstå disse begreber korrekt, inden du starter afhængighedsinjektion for at forstå, hvordan foråret fungerer.
Jeg håber, at vi fortsætter med disse selvstudier uge for uge, glem ikke at forlade dine kommentarer til næste gang!Kan du lide og hjælpe denne vejledning?Du kan belønne forfatteren ved at trykke på denne knap for at give ham et positivt punkt