CodeGym /Blog Java /Aleatoriu /Polimorfismul în Java
John Squirrels
Nivel
San Francisco

Polimorfismul în Java

Publicat în grup
Bună! Astăzi încheiem o serie de lecții despre principiile POO. În această lecție, vom vorbi despre polimorfismul Java. Polimorfismul este capacitatea de a lucra cu mai multe tipuri ca și cum ar fi același tip. Mai mult, comportamentul obiectelor va fi diferit în funcție de tipul lor. Să aruncăm o privire mai atentă la această afirmație. Să începem cu prima parte: „abilitatea de a lucra cu mai multe tipuri ca și cum ar fi același tip”. Cum pot fi diferite tipuri la fel? Sună puțin ciudat :/ Cum se utilizează polimorfismul - 1De fapt, totul este foarte simplu. De exemplu, această situație apare în timpul utilizării obișnuite a moștenirii. Să vedem cum funcționează. Să presupunem că avem o clasă părinte Cat simplă cu o singură metodă run() :

public class Cat {

   public void run() {
       System.out.println("Run!");
   }
}
Acum vom crea trei clase care moștenesc Pisica : Leul , Tigrul și Ghepardul .

public class Lion extends Cat {

   @Override
   public void run() {
       System.out.println("Lion runs at 80 km/h");
   }
}

public class Tiger extends Cat {

   @Override
   public void run() {
       System.out.println("Tiger runs at 60 km/h");
   }
}

public class Cheetah extends Cat {

   @Override
   public void run() {
       System.out.println("Cheetah runs at up to 120 km/h");
   }
}
Deci avem 3 clase. Să modelăm situația în care putem lucra cu ei ca și cum ar fi aceeași clasă. Imaginați-vă că una dintre pisicile noastre este bolnavă și are nevoie de ajutor de la Dr. Dolittle. Să încercăm să creăm o clasă Dolittle care poate vindeca lei, tigri și gheparzi.

public class Dolittle {

   public void healLion(Lion lion) {

       System.out.println("Lion is healthy!");
   }

   public void healTiger(Tiger tiger) {

       System.out.println("Tiger is healthy!");
   }

   public void healCheetah(Cheetah cheetah) {

       System.out.println("Cheetah is healthy!");
   }
}
Se pare că problema este rezolvată: clasa este scrisă și gata de plecare. Dar ce vom face dacă vrem să ne extindem programul? În prezent avem doar 3 tipuri: lei, tigri și gheparzi. Dar există peste 40 de tipuri de pisici în lume. Imaginează-ți ce s-ar întâmpla dacă am adăuga clase separate pentru manuls, jaguari, Maine Cooni, pisici de casă și toate celelalte. Cum se utilizează polimorfismul - 2Programul în sine va funcționa, desigur, dar trebuie să adăugăm constant noi metode la clasa Dolittle pentru a vindeca fiecare tip de pisică. Ca rezultat, va crește la dimensiuni fără precedent. Aici intervine polimorfismul – „abilitatea de a lucra cu mai multe tipuri ca și cum ar fi același tip” –. Nu trebuie să creăm nenumărate metode pentru a face același lucru – să vindecăm o pisică. O singură metodă este suficientă pentru toți:

public class Dolittle {

   public void healCat(Cat cat) {

       System.out.println("The patient is healthy!");
   }
}
Metoda healCat() poate accepta obiecte Lion , Tiger și Cheetah - toate sunt instanțe ale Cat :

public class Main {

   public static void main(String[] args) {

       Dolittle dolittle = new Dolittle();

       Lion simba = new Lion();
       Tiger shereKhan = new Tiger();
       Cheetah chester = new Cheetah();

       dolittle.healCat(simba);
       dolittle.healCat(shereKhan);
       dolittle.healCat(chester);
   }
}
Ieșire consolă: pacientul este sănătos! Pacientul este sanatos! Pacientul este sanatos! Deci Dolittle al nostruclasa lucrează cu tipuri diferite ca și cum ar fi același tip. Acum să abordăm partea a doua: „mai mult, comportamentul obiectelor va fi diferit în funcție de tipul lor”. Totul este foarte simplu. În natură, fiecare pisică aleargă într-un mod diferit. Cel puțin, rulează la viteze diferite. Dintre cele trei feline ale noastre, ghepardul este cel mai rapid, în timp ce tigrul și leul aleargă mai încet. Cu alte cuvinte, comportamentul lor este diferit. Polimorfismul face mai mult decât să ne lase să folosim diferite tipuri ca unul singur. De asemenea, ne permite să ne amintim diferențele lor, păstrând comportamentul specific fiecăruia dintre ele. Următorul exemplu ilustrează acest lucru. Să presupunem că pisicile noastre, după o recuperare reușită, au decis să se bucure de o mică alergare. Vom adăuga acest lucru la clasa noastră Dolittle :

public class Dolittle {

   public void healCat(Cat cat) {

       System.out.println("The patient is healthy!");
       cat.run();
   }
}
Să încercăm să rulăm același cod pentru a trata trei animale:

public static void main(String[] args) {

   Dolittle dolittle = new Dolittle();

   Lion simba = new Lion();
   Tiger shereKhan = new Tiger();
   Cheetah chester = new Cheetah();

   dolittle.healCat(simba);
   dolittle.healCat(shereKhan);
   dolittle.healCat(chester);
}
Și iată cum arată rezultatele: pacientul este sănătos! Leul aleargă cu 80 km/h. Pacientul este sanatos! Tigerul rulează cu 60 km/h. Pacientul este sanatos! Ghepardul aleargă cu până la 120 km/h Aici vedem clar că comportamentul specific al obiectelor este păstrat, chiar dacă am trecut toate cele trei animale la metoda după ce le-am „generalizat” la Cat . Datorită polimorfismului, Java își amintește bine că acestea nu sunt pur și simplu trei pisici. Sunt un leu, un tigru și un ghepard, care aleargă fiecare diferit. Aceasta ilustrează principalul avantaj al polimorfismului: flexibilitatea. Când trebuie să implementăm unele funcționalități comune de mai multe tipuri, atunci leii, tigrii și gheparzii devin pur și simplu „pisici”. Toate animalele sunt diferite, dar în unele situații o pisică este o pisică, indiferent de specia ei :) Iată câteva confirmări video pentru tine.
Când această „generalizare” este nedorită și avem nevoie, în schimb, ca fiecare specie să se comporte diferit, fiecare tip își face treaba lui. Datorită polimorfismului, puteți crea o singură interfață (set de metode) pentru o gamă largă de clase. Acest lucru face programele mai puțin complicate. Chiar dacă am extinde programul pentru a suporta 40 de tipuri de pisici, am avea totuși cea mai simplă interfață: o singură metodă run() pentru toate cele 40 de pisici.
Comentarii
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION