1. Hval og kyr

Her er et interessant zoologisk faktum: en ku er mye nærmere en hval enn for eksempel en flodhest. Det viser seg at kyr og hval er relativt nære slektninger.

Se her. La oss fortelle deg om polymorfisme - et annet veldig kraftig verktøy for OOP . Den har fire funksjoner.


2. Arv er ikke et universalmiddel

Tenk deg at du har skrevet en Cowklasse for et spill. Den har mange felt og metoder. Objekter i denne klassen kan gjøre forskjellige ting: gå, spise og sove. Kyr har også en bjelle som ringer når de går. Anta at du har implementert alt i klassen til minste detalj.

Og så kommer klienten din og sier at hun vil gi ut et nytt spillnivå, der all handlingen foregår til sjøs, og hovedpersonen er en hval.

Du begynner å designe en Whaleklasse og innser at den bare er litt forskjellig fra Cowklassen. Logikken til begge klassene er veldig lik, og du bestemmer deg for å bruke arv.

Polymorfisme i Java

Klassen Cower ideell for å påta seg rollen som foreldreklassen: den har alle nødvendige variabler og metoder. Alt vi trenger å gjøre er å gi hvalen evnen til å svømme. Men det er et problem: hvalen din har bein, horn og en bjelle. Tross alt er denne funksjonaliteten implementert inne i Cowklassen. Hva kan gjøres her?

Polymorfisme i Java.  Arv

3. Metodeoverstyring

Metodeoverstyring kommer oss til unnsetning. Hvis vi har arvet en metode som ikke helt gjør det vi ønsker i vår nye klasse, kan vi erstatte den metoden med en annen.

Metode overstyrer

Hvordan gjøres dette? I vår etterkommerklasse erklærer vi den samme metoden som metoden til den overordnede klassen som vi ønsker å overstyre. Vi skriver vår nye kode i den. Og det er det — det er som om den gamle metoden i foreldreklassen rett og slett ikke eksisterer.

Slik 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 definert her - CowogWhale
  • WhalearverCow
  • Klassen Whaleoverstyrer printName()metoden
public static void main(String[] args)
{
   Cow cow = new Cow();
   cow.printName();
}
Denne koden viser følgende tekst på skjermen:
I'm a cow
public static void main(String[] args)
{
   Whale whale = new Whale();
   whale.printName();
}
Denne koden viser følgende på skjermen:
I'm a whale

Etter å ha arvet Cowklassen og overstyrt printNamemetoden, Whaleinneholder 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 vet ikke om noen gammel metode.