Java / Spring - Arv, polymorfism och beroendeinsprutning - Del 2

Innehållsförteckning
Detta är den andra delen av en serie självstudier som fokuserar på att granska de grundläggande ämnena i Java -språket för att förbereda läsaren i användningen av Spring Framework. Den första delen av denna handledningsserie hittar du här. I denna handledning kommer vi att prata om polymorfism.
Ordet polymorfism kommer från det grekiska "poly" som betyder många och "morpho" som betyder form och i allmänhet är det det det hänvisar till, förmågan att anta flera former. I objektorienterad programmering talar vi om variabler eller referenser som kan ha formen av flera olika objekt.
Nu när du vet var konceptet kommer ifrån, låt oss försöka relatera det till Java -språket. Som vi såg i den föregående handledningen tillåter begreppet "ärftlighet" oss att upprätta ett förälder-barn-förhållande mellan två privata klasser:
Bild skickad
I det här exemplet är arvsrelationen mellan klassen Hund och klassen Djur, klass Katt och klassen Djur och klassen Häst och klassen Djur, observera att mellan Hund, Katt Y Häst det finns inget direkt samband.
Med hjälp av detta diagram som grund kan vi säga att en hund är ett djur, en katt är ett djur och en häst är ett djur. När du kan uttrycka förhållandet på det sättet i Java kan vi säga att en variabel av klassen Djur är polymorf eftersom det kan ha formen av ett Häst, av en Katt eller a Hund.
I föregående handledning såg vi också att ALLA klasser ärver direkt eller indirekt från klassen Objekt, i det här fallet är diagrammet något mer komplett om vi definierar det så här:
Bild skickad
Och detta kan förlängas flera nivåer (I huvudsak beror nivågränsen på din JVM men är normalt över 40) Så ett djur ÄR ett objekt, en katt ÄR ett djur och en katt (genom transitivitet) ÄR ett objekt.
Java låter dig sedan använda klassreferenser på höga punkter i denna struktur för att peka på objekt under dem i strukturen. Till exempel:
 public static void main (String [] args) {Object o1 = new Object (); Djur a1 = nytt djur (); Hund p = ny hund (); o1 = a1; o1 = p; a1 = p; Objekt o2 = nytt djur (); Objekt o3 = ny hund (); Djur a2 = ny hund (); booleskt b1 = o1 == o2; booleskt b2 = o1 == o3; booleskt b3 = o1 == a2; if (b1 || b2 || b3) {DoNothing (); }} 

Som du kan se kan en objektvariabel referera till ett djurobjekt eller ett hundobjekt precis som en djurvariabel kan referera till ett hundobjekt. Polymorfismskapaciteten som härleds från detta leder till att vi kan manipulera ett objekt utan att behöva veta exakt vilket objekt IS, låt oss se följande exempelmetod:
public static void doSomething (Animal a) {a.getColorDePelo (); }

När en applikation använder den här metoden vet den inte vilket djur den tar emot med parameter, det kan vara en hund, det kan vara en katt, det kan vara en häst eller senare en mullvad, en elefant, en mandrill eller någon annan klass som är av typen Djur.
Nyckeln till den här egenskapen är att det tillåter programmet att använda metoder för vissa underklasser utan att specifikt veta vilken typ av djur det är och därmed behålla en betydande abstraktionsnivå med avseende på framtida implementeringar av djurklassen.
I nästa handledning kommer vi att gå djupare in på ämnet polymorfism, vi kommer att se vad gränssnitt är och hur man programmerar fokuserat på gränssnitt, vilket hjälper till att förstå följande handledning.
Ämnet har blivit lite längre än jag förväntat mig men förtvivla inte! Det är viktigt att förstå dessa begrepp korrekt innan du börjar Dependency Injection för att förstå hur våren fungerar.
Jag hoppas att vi fortsätter med dessa självstudier vecka för vecka, glöm inte att lämna dina kommentarer till nästa gång!Gillade du och hjälpte denna handledning?Du kan belöna författaren genom att trycka på den här knappen för att ge honom en positiv poäng
wave wave wave wave wave