1. Bálnák és tehenek

Íme egy érdekes állattani tény: a tehén sokkal közelebb áll a bálnához, mint például a vízilóhoz. Kiderült, hogy a tehenek és a bálnák viszonylag közeli rokonok.

Nézz ide. Beszéljünk a polimorfizmusról – az OOP egy másik nagyon hatékony eszközéről . Négy funkciója van.


2. Az öröklés nem csodaszer

Képzeld el, hogy írtál egy Cowosztályt egy játékhoz. Számos területe és módszere van. Ennek az osztálynak az objektumai sokféle dolgot tudnak végezni: sétálni, enni és aludni. A tehenek harangot is viselnek, ami megszólal, amikor sétálnak. Tegyük fel, hogy mindent a legapróbb részletekig megvalósítottál az osztályban.

Aztán jön az ügyfele, és azt mondja, hogy szeretne kiadni egy új játékszintet, amelyben minden akció a tengeren játszódik, és a főszereplő egy bálna.

Elkezdesz tervezni egy Whaleosztályt, és rájössz, hogy az csak kis mértékben különbözik az Cowosztálytól. Mindkét osztály logikája nagyon hasonló, és úgy dönt, hogy öröklést használ.

Polimorfizmus Java nyelven

Az Cowosztály ideális a szülő osztály szerepének felvállalására: minden szükséges változóval és metódussal rendelkezik. Csak annyit kell tennünk, hogy a bálnának úszni kell. De van egy probléma: a bálnádnak lábai, szarvai és harangja van. Végül is ez a funkció az Cowosztályon belül van megvalósítva. Mit lehet itt tenni?

Polimorfizmus Java nyelven.  Öröklés

3. Módszer felülbírálása

A módszer felülbírálása a segítségünkre van. Ha olyan metódust örököltünk, amely nem egészen azt csinálja, amit szeretnénk az új osztályunkban, akkor ezt a metódust lecserélhetjük egy másikra.

Módszer felülbírálása

Hogyan történik ez? A leszármazott osztályunkban ugyanazt a metódust deklaráljuk, mint a felülbírálni kívánt szülő osztály metódusát. Ebbe írjuk az új kódunkat. És ennyi – olyan, mintha a régi metódus a szülőosztályban egyszerűen nem létezne.

Ez így működik:

Kód Leírás
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");
   }
}
  • Itt két osztály van meghatározva – CowésWhale
  • WhaleörökölCow
  • Az Whaleosztály felülírja a printName()metódust
public static void main(String[] args)
{
   Cow cow = new Cow();
   cow.printName();
}
Ez a kód a következő szöveget jeleníti meg a képernyőn:
I'm a cow
public static void main(String[] args)
{
   Whale whale = new Whale();
   whale.printName();
}
Ez a kód a következőket jeleníti meg a képernyőn:
I'm a whale

Az osztály öröklése Cowés a printNamemetódus felülbírálása után az Whaleosztály valójában a következő adatokat és metódusokat tartalmazza:

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

   public void printName()
   {
      System.out.println("I'm a whale");
   }
}
Egyetlen régi módszerről sem tudunk.