CodeGym /Java Blog /Willekeurig /Polymorfisme op Java
John Squirrels
Niveau 41
San Francisco

Polymorfisme op Java

Gepubliceerd in de groep Willekeurig
Hoi! Vandaag sluiten we een serie lessen af ​​over de principes van OOP. In deze les gaan we het hebben over Java-polymorfisme. Polymorfisme is het vermogen om met verschillende typen te werken alsof ze van hetzelfde type zijn. Bovendien zal het gedrag van de objecten verschillen, afhankelijk van hun type. Laten we deze verklaring eens nader bekijken. Laten we beginnen met het eerste deel: 'het vermogen om met meerdere typen te werken alsof het hetzelfde type is'. Hoe kunnen verschillende soorten hetzelfde zijn? Het klinkt een beetje vreemd :/ Hoe polymorfisme te gebruiken - 1Eigenlijk is het allemaal heel simpel. Deze situatie doet zich bijvoorbeeld voor bij gewoon gebruik van erfenis. Laten we eens kijken hoe dat werkt. Stel dat we een eenvoudige Cat- ouderklasse hebben met een enkele run() -methode:

public class Cat {

   public void run() {
       System.out.println("Run!");
   }
}
Nu gaan we drie klassen maken die Cat erven : Lion , Tiger en Cheetah .

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");
   }
}
We hebben dus 3 klassen. Laten we de situatie modelleren waarin we met hen kunnen werken alsof ze dezelfde klas zijn. Stel je voor dat een van onze katten ziek is en hulp nodig heeft van Dr. Dolittle. Laten we proberen een Dolittle- klasse te maken die leeuwen, tijgers en cheeta's kan genezen.

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!");
   }
}
Het lijkt erop dat het probleem is opgelost: de les is geschreven en klaar voor gebruik. Maar wat gaan we doen als we ons programma willen uitbreiden? We hebben momenteel slechts 3 soorten: leeuwen, tijgers en cheeta's. Maar er zijn meer dan 40 soorten katten in de wereld. Stel je voor wat er zou gebeuren als we aparte klassen zouden toevoegen voor manuls, jaguars, Maine Coons, huiskatten en de rest. Hoe polymorfisme te gebruiken - 2Het programma zelf zal natuurlijk werken, maar we moeten voortdurend nieuwe methoden aan de Dolittle- klasse toevoegen om elk type kat te genezen. Als gevolg hiervan zal het groeien tot ongekende afmetingen. Dit is waar polymorfisme - "het vermogen om met verschillende typen te werken alsof ze van hetzelfde type zijn" - om de hoek komt kijken. We hoeven geen talloze methoden te bedenken om hetzelfde te doen: een kat genezen. Eén methode is genoeg voor allemaal:

public class Dolittle {

   public void healCat(Cat cat) {

       System.out.println("The patient is healthy!");
   }
}
De methode healCat() kan objecten Lion , Tiger en Cheetah accepteren — het zijn allemaal instanties van 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);
   }
}
Console-uitvoer: de patiënt is gezond! De patiënt is gezond! De patiënt is gezond! Onze Dolittle dusclass werkt met verschillende typen alsof ze van hetzelfde type zijn. Laten we nu het tweede deel aanpakken: "Bovendien zal het gedrag van de objecten verschillen, afhankelijk van hun type". Het is allemaal heel eenvoudig. In de natuur rent elke kat op een andere manier. Ze draaien op zijn minst met verschillende snelheden. Van onze drie katachtigen is de cheetah de snelste, terwijl de tijger en leeuw langzamer rennen. Met andere woorden, hun gedrag is anders. Polymorfisme doet meer dan ons alleen verschillende typen als één laten gebruiken. Het laat ons ook hun verschillen onthouden, waarbij het specifieke gedrag van elk van hen behouden blijft. Het volgende voorbeeld illustreert dit. Stel dat onze katten, na een succesvol herstel, besloten om een ​​rondje te gaan rennen. We voegen dit toe aan onze Dolittle- klasse:

public class Dolittle {

   public void healCat(Cat cat) {

       System.out.println("The patient is healthy!");
       cat.run();
   }
}
Laten we proberen dezelfde code uit te voeren om drie dieren te behandelen:

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);
}
En zo zien de resultaten eruit: De patiënt is gezond! Lion rent met 80 km/u. De patiënt is gezond! Tijger loopt met 60 km/u. De patiënt is gezond! Cheetah rent tot 120 km/u Hier zien we duidelijk dat het specifieke gedrag van objecten behouden blijft, ook al hebben we alle drie de dieren aan de methode doorgegeven nadat we ze hadden 'gegeneraliseerd' naar Cat . Vanwege polymorfisme herinnert Java zich goed dat dit niet zomaar drie katten zijn. Het zijn een leeuw, een tijger en een cheeta, die elk anders rennen. Dit illustreert het belangrijkste voordeel van polymorfisme: flexibiliteit. Als we een bepaalde functionaliteit moeten implementeren die door veel soorten wordt gedeeld, worden leeuwen, tijgers en cheeta's gewoon 'katten'. Alle dieren zijn verschillend, maar in sommige situaties is een kat een kat, ongeacht de soort :) Hier is wat videobevestiging voor je.
Wanneer deze 'generalisatie' ongewenst is en we in plaats daarvan elke soort nodig hebben om zich anders te gedragen, doet elk type zijn eigen ding. Dankzij polymorfisme kunt u een enkele interface (set methoden) maken voor een breed scala aan klassen. Dit maakt programma's minder ingewikkeld. Zelfs als we het programma uitbreiden om 40 soorten katten te ondersteunen, zouden we nog steeds de eenvoudigste interface hebben: één methode run() voor alle 40 katten.
Opmerkingen
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION