1. Mga balyena at baka

Narito ang isang kawili-wiling zoological na katotohanan: ang isang baka ay mas malapit sa isang balyena kaysa, halimbawa, sa isang hippopotamus. Lumalabas na ang mga baka at balyena ay medyo malapit na kamag-anak.

Tumingin dito. Sabihin natin sa iyo ang tungkol sa polymorphism — isa pang napakalakas na tool ng OOP . Mayroon itong apat na tampok.


2. Ang mana ay hindi panlunas sa lahat

Isipin na nagsulat ka ng isang Cowklase para sa isang laro. Marami itong larangan at pamamaraan. Ang mga bagay ng klase na ito ay maaaring gumawa ng iba't ibang bagay: maglakad, kumain, at matulog. Ang mga baka ay nagsusuot din ng kampana na tumutunog kapag sila ay naglalakad. Ipagpalagay na naipatupad mo ang lahat sa klase hanggang sa pinakamaliit na detalye.

At pagkatapos ay dumating ang iyong kliyente at sinabing gusto niyang maglabas ng bagong antas ng laro, kung saan ang lahat ng aksyon ay nagaganap sa dagat, at ang pangunahing karakter ay isang balyena.

Nagsisimula kang magdisenyo ng isang Whaleklase at napagtanto mo na ito ay bahagyang naiiba sa Cowklase. Ang lohika ng parehong mga klase ay halos magkapareho at nagpasya kang gumamit ng mana.

Polymorphism sa Java

Ang Cowklase ay perpekto para sa tungkulin ng parent class: mayroon itong lahat ng kinakailangang variable at pamamaraan. Ang kailangan lang nating gawin ay bigyan ang balyena ng kakayahang lumangoy. Ngunit may problema: ang iyong balyena ay may mga binti, sungay, at kampana. Pagkatapos ng lahat, ang pagpapaandar na ito ay ipinatupad sa loob ng Cowklase. Ano ang maaaring gawin dito?

Polymorphism sa Java.  Mana

3. Pamamaraan override

Ang pag-override ng pamamaraan ay darating upang iligtas tayo. Kung nagmana tayo ng isang pamamaraan na hindi masyadong nagagawa ang gusto natin sa ating bagong klase, maaari nating palitan ang pamamaraang iyon ng isa pa.

Pamamaraan override

Paano ito ginagawa? Sa aming descendant class, idinedeklara namin ang parehong paraan tulad ng method ng parent class na gusto naming i-override. Isinulat namin ang aming bagong code dito. At iyon lang — parang ang lumang pamamaraan sa parent class ay wala lang.

Ito ay kung paano ito gumagana:

Code Paglalarawan
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");
   }
}
  • Dalawang klase ang tinukoy dito — CowatWhale
  • WhalenamamanaCow
  • Ino-override ng Whaleklase ang printName()pamamaraan
public static void main(String[] args)
{
   Cow cow = new Cow();
   cow.printName();
}
Ipinapakita ng code na ito ang sumusunod na teksto sa screen:
I'm a cow
public static void main(String[] args)
{
   Whale whale = new Whale();
   whale.printName();
}
Ipinapakita ng code na ito ang sumusunod sa screen:
I'm a whale

Matapos mamana ang Cowklase at i-override ang printNamepamamaraan, ang Whaleklase ay talagang naglalaman ng sumusunod na data at pamamaraan:

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

   public void printName()
   {
      System.out.println("I'm a whale");
   }
}
Hindi namin alam ang tungkol sa anumang lumang pamamaraan.