Java / Spring - Arv, polymorfisme og avhengighetsinjeksjon - Del 2

Innholdsfortegnelse
Dette er den andre delen av en serie opplæringsprogrammer som fokuserer på å gjennomgå de grunnleggende temaene i Java -språket for å forberede leseren i bruk av Spring Framework. Den første delen av denne opplæringsserien finner du her. I denne opplæringen vil vi snakke om polymorfisme.
Ordet polymorfisme kommer fra det greske "poly" som betyr mange og "morpho" som betyr form og generelt er det det det refererer til, evnen til å ta flere former. I objektorientert programmering snakker vi om variabler eller referanser som kan ha form av flere forskjellige objekter.
Nå som du vet hvor konseptet kommer fra, la oss prøve å relatere det til Java -språket. Som vi så i forrige opplæring, lar begrepet "arv" oss etablere et foreldre-barn-forhold mellom 2 private klasser:
Bilde sendt
I dette eksemplet er arverelasjonen mellom klassen Hund og klassen Dyr, klasse Katt og klassen Dyr og klassen Hest og klassen Dyr, merk at mellom Hund, Katt Y Hest det er ikke noe direkte forhold.
Ved å bruke dette diagrammet som grunnlag, kan vi si at en hund ER et dyr, en katt er et dyr og en hest er et dyr. Når du kan uttrykke forholdet på den måten i Java, kan vi si at en variabel av klassen Dyr er polymorf siden den kan ha form av en Hest, av en Katt eller a Hund.
I forrige opplæring så vi også at ALLE klasser arver direkte eller indirekte fra klassen Gjenstand, i dette tilfellet er diagrammet litt mer komplett hvis vi definerer det slik:
Bilde sendt
Og dette kan utvides flere nivåer ned (I hovedsak vil nivået taket avhenge av JVM, men er normalt over 40) Så et dyr ER et objekt, en katt er et dyr og en katt (ved transitivitet) ER et objekt.
Java lar deg deretter bruke klassereferanser på høydepunkter i denne strukturen for å peke på objekter under dem i strukturen. For eksempel:
 public static void main (String [] args) {Object o1 = new Object (); Dyr a1 = nytt dyr (); Hund p = ny hund (); o1 = a1; o1 = p; a1 = p; Objekt o2 = nytt 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 akkurat som en dyrvariabel kan referere til et hundeobjekt. Polymorfismekapasiteten som stammer fra dette fører til at vi er i stand til å manipulere et objekt uten å måtte vite nøyaktig hvilket objekt IS, la oss se følgende eksempelmetode:
offentlig statisk tomrom doSomething (Animal a) {a.getColorDePelo (); }

Når en applikasjon bruker denne metoden, vet den ikke hvilket dyr den mottar etter parameter, det kan være en hund, det kan være en katt, det kan være en hest eller senere en føflekk, en elefant, en mandrill eller en annen klasse som er av dyretypen.
Nøkkelen til denne egenskapen er at den lar programmet bruke metoder for visse underklasser uten å vite spesifikt hvilken type dyr det er og dermed opprettholde et betydelig abstraksjonsnivå med hensyn til fremtidige implementeringer av dyreklassen.
I den neste opplæringen vil vi gå dypere inn på emnet polymorfisme, vi vil se hva grensesnitt er og hvordan vi programmerer fokusert på grensesnitt, noe som vil hjelpe til med å forstå følgende opplæringsprogrammer.
Temaet har blitt litt lengre enn jeg forventet, men ikke fortvil! Det er viktig å forstå disse konseptene riktig før du starter Dependency Injection for å forstå hvordan våren fungerer.
Jeg håper vi fortsetter med disse opplæringene uke for uke, ikke glem å legge igjen kommentarene dine til neste gang!Likte og hjalp du denne opplæringen?Du kan belønne forfatteren ved å trykke på denne knappen for å gi ham et positivt poeng
wave wave wave wave wave