1. Valar och kor

Här är ett intressant zoologiskt faktum: en ko är mycket närmare en val än till exempel en flodhäst. Det visar sig att kor och valar är relativt nära släktingar.

Titta här. Låt oss berätta om polymorfism — ett annat mycket kraftfullt verktyg för OOP . Den har fyra funktioner.


2. Arv är inget universalmedel

Föreställ dig att du har skrivit en Cowklass för ett spel. Den har många områden och metoder. Objekt i den här klassen kan göra olika saker: gå, äta och sova. Kor bär också en klocka som ringer när de går. Anta att du har implementerat allt i klassen till minsta detalj.

Och så kommer din klient och säger att hon vill släppa en ny spelnivå, där all action utspelar sig till sjöss, och huvudpersonen är en val.

Du börjar designa en Whaleklass och inser att den bara skiljer sig något från Cowklassen. Logiken för båda klasserna är väldigt lika och du bestämmer dig för att använda arv.

Polymorfism i Java

Klassen Cowär idealisk för att ta på sig rollen som förälderklassen: den har alla nödvändiga variabler och metoder. Allt vi behöver göra är att ge valen förmågan att simma. Men det finns ett problem: din val har ben, horn och en klocka. När allt kommer omkring är denna funktionalitet implementerad i Cowklassen. Vad kan göras här?

Polymorfism i Java.  Arv

3. Åsidosättande av metod

Metodöverskridande kommer till vår räddning. Om vi ​​ärvt en metod som inte riktigt gör som vi vill i vår nya klass, kan vi ersätta den metoden med en annan.

Åsidosättande av metod

Hur görs detta? I vår descendant klass deklarerar vi samma metod som metoden för den överordnade klassen som vi vill åsidosätta. Vi skriver vår nya kod i den. Och det är det — det är som om den gamla metoden i föräldraklassen helt enkelt inte existerar.

Så här fungerar det:

Koda Beskrivning
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");
   }
}
  • Två klasser definieras här - CowochWhale
  • WhaleärverCow
  • Klassen Whaleåsidosätter printName()metoden
public static void main(String[] args)
{
   Cow cow = new Cow();
   cow.printName();
}
Denna kod visar följande text på skärmen:
I'm a cow
public static void main(String[] args)
{
   Whale whale = new Whale();
   whale.printName();
}
Denna kod visar följande på skärmen:
I'm a whale

Efter att ha ärvt Cowklassen och åsidosatt printNamemetoden, Whaleinnehåller klassen faktiskt följande data och 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 känner inte till någon gammal metod.