1. Walvissen en koeien

Hier is een interessant zoölogisch feit: een koe staat veel dichter bij een walvis dan bijvoorbeeld bij een nijlpaard. Het blijkt dat koeien en walvissen relatief naaste verwanten zijn.

Kijk hier. Laten we je vertellen over polymorfisme - nog een zeer krachtig hulpmiddel van OOP . Het heeft vier kenmerken.


2. Overerving is geen wondermiddel

Stel je voor dat je een les hebt geschreven Cowvoor een spel. Het heeft veel velden en methoden. Objecten van deze klasse kunnen verschillende dingen doen: lopen, eten en slapen. Koeien dragen ook een bel die rinkelt als ze lopen. Stel, je hebt alles in de klas tot in het kleinste detail geïmplementeerd.

En dan komt je klant en zegt dat ze een nieuw spelniveau wil uitbrengen, waarin alle actie op zee plaatsvindt en de hoofdpersoon een walvis is.

Je begint met het ontwerpen van een Whaleklas en realiseert je dat deze maar een klein beetje verschilt van de Cowklas. De logica van beide klassen lijkt erg op elkaar en u besluit overerving te gebruiken.

Polymorfisme op Java

De Cowklasse is ideaal om de rol van de ouderklasse op zich te nemen: het heeft alle noodzakelijke variabelen en methoden. Het enige wat we moeten doen is de walvis de mogelijkheid geven om te zwemmen. Maar er is een probleem: je walvis heeft poten, hoorns en een bel. Deze functionaliteit is immers binnen de Cowklas geïmplementeerd. Wat kan hier worden gedaan?

Polymorfisme op Java.  Erfenis

3. Methode overschrijven

Methode negeren komt ons te hulp. Als we een methode hebben geërfd die niet helemaal doet wat we willen in onze nieuwe klasse, kunnen we die methode vervangen door een andere.

Methode overheersend

Hoe wordt dit gedaan? In onze afstammelingenklasse declareren we dezelfde methode als de methode van de bovenliggende klasse die we willen overschrijven. We schrijven onze nieuwe code erin. En dat is het - het is alsof de oude methode in de bovenliggende klasse gewoon niet bestaat.

Dit is hoe het werkt:

Code Beschrijving
class Cow
{
   public void printColor ()
   {
      System.out.println("I'm a white whale");
   }

   public void printName()
   {
      System.out.println("I'm a cow");
   }
}

class Whale extends Cow
{
   public void printName()
   {
      System.out.println("I'm a whale");
   }
}
  • Hier worden twee klassen gedefinieerd — CowenWhale
  • WhaleerftCow
  • De Whaleklasse overschrijft de printName()methode
public static void main(String[] args)
{
   Cow cow = new Cow();
   cow.printName();
}
Deze code toont de volgende tekst op het scherm:
I'm a cow
public static void main(String[] args)
{
   Whale whale = new Whale();
   whale.printName();
}
Deze code geeft het volgende weer op het scherm:
I'm a whale

Na het erven van de Cowklasse en het negeren van de printNamemethode, Whalebevat de klasse feitelijk de volgende gegevens en methoden:

class Whale
{
   public void printColor()
   {
      System.out.println("I'm a white whale");
   }

   public void printName()
   {
      System.out.println("I'm a whale");
   }
}
We kennen geen enkele oude methode.