1. Hvaler og køer

Her er et interessant zoologisk faktum: en ko er meget tættere på en hval end for eksempel på en flodhest. Det viser sig, at køer og hvaler er relativt nære slægtninge.

Se her. Lad os fortælle dig om polymorfi - et andet meget kraftfuldt værktøj til OOP . Den har fire funktioner.


2. Arv er ikke et vidundermiddel

Forestil dig, at du har skrevet en Cowklasse til et spil. Det har mange felter og metoder. Objekter i denne klasse kan gøre forskellige ting: gå, spise og sove. Køer bærer også en klokke, der ringer, når de går. Antag, at du har implementeret alt i klassen til mindste detalje.

Og så kommer din klient og siger, at hun vil udgive et nyt spilniveau, hvor al handling foregår på havet, og hovedpersonen er en hval.

Du begynder at designe en Whaleklasse og indser, at den kun er lidt anderledes end Cowklassen. Logikken i begge klasser er meget ens, og du beslutter dig for at bruge arv.

Polymorfi i Java

Klassen Cower ideel til at påtage sig rollen som forældreklassen: den har alle de nødvendige variabler og metoder. Alt, hvad vi skal gøre, er at give hvalen evnen til at svømme. Men der er et problem: din hval har ben, horn og en klokke. Denne funktionalitet er trods alt implementeret inde i Cowklassen. Hvad kan man gøre her?

Polymorfi i Java.  Arv

3. Metodetilsidesættelse

Metodetilsidesættelse kommer os til undsætning. Hvis vi har arvet en metode, der ikke helt gør, hvad vi ønsker i vores nye klasse, kan vi erstatte den metode med en anden.

Metode tilsidesætter

Hvordan gøres dette? I vores efterkommerklasse erklærer vi den samme metode som metoden for den overordnede klasse, som vi ønsker at tilsidesætte. Vi skriver vores nye kode i den. Og det er det — det er, som om den gamle metode i forældreklassen simpelthen ikke eksisterer.

Sådan fungerer det:

Kode Beskrivelse
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");
   }
}
  • To klasser er defineret her - CowogWhale
  • WhalearverCow
  • Klassen Whaletilsidesætter printName()metoden
public static void main(String[] args)
{
   Cow cow = new Cow();
   cow.printName();
}
Denne kode viser følgende tekst på skærmen:
I'm a cow
public static void main(String[] args)
{
   Whale whale = new Whale();
   whale.printName();
}
Denne kode viser følgende på skærmen:
I'm a whale

Efter at have arvet Cowklassen og tilsidesat printNamemetoden, Whaleindeholder klassen faktisk følgende data og metoder:

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

   public void printName()
   {
      System.out.println("I'm a whale");
   }
}
Vi kender ikke til nogen gammel metode.