"Hello, Amigo! Kahapon ay pinag-aralan ka sa mga paraan ng abstract classes. Ngayon ay oras na para palalimin ang ating kaalaman. Gusto kong turuan ka kung paano gumamit ng mga abstract na klase nang tama."

Mahirap na makabuo ng isang real-world na pagkakatulad para sa isang abstract na klase. Ang isang klase ay karaniwang isang modelo ng ilang entity. Ngunit ang isang abstract na klase ay naglalaman ng mga pamamaraan na hindi pa ipinatupad, at maaaring maglaman ng mga pamamaraan na ipinatupad. Anong ibig sabihin niyan? Anong pagkakatulad para sa abstract na klase ang makikita natin? May ganyan ba sa totoong mundo?

Actually, meron. Isipin ang chassis ng halos tapos na kotse sa isang conveyor belt. Maaari akong mag-install ng alinman sa isang souped-up na makina o isang napakahusay na makina. Alinman sa isang leather interior o fabric upholstery. Ang partikular na pagpapatupad ng kotse ay hindi pa natutukoy. Higit pa rito, maaaring gamitin ang tsasis upang makagawa ng ilang partikular na pagpapatupad. Ngunit walang sinuman ang nagnanais ng kotse sa kasalukuyang anyo nito. Ito ay isang klasikong abstract na klase : ang paggawa ng mga pagkakataon nito ay hindi makatuwiran, kaya hindi mo ito magagawa; ang klase ay may katuturan lamang dahil sa maraming ganap na tagapagmana na malilikha sa batayan nito.

"Madali lang yan."

Ngunit maaaring mayroong higit pang mga abstract na pagkakatulad. Mas katulad ng mga interface na may ilang ipinatupad na pamamaraan. Halimbawa, isaalang-alang ang isang propesyonal na interpreter . Nang hindi tinukoy ang pinagmulan at target na mga wika, mayroon kaming isang « abstract translator ». O isaalang-alang ang isang bodyguard. Maaaring alam natin na mahusay siya sa martial arts at kaya niyang protektahan ang kanyang kliyente. Ngunit kung aling martial arts at kung paano niya poprotektahan ang kliyente ay "mga detalye ng pagpapatupad" ng bawat partikular na bodyguard.

Tingnan natin ang isang halimbawa:

Java code Paglalarawan
abstract class BodyGuard
{
 abstract void applyMartialArts(Attacker attacker);

 void shoot(Attacker attacker)
 {
    gun.shoot(attacker);
 }

 void saveClientLife(Attacker attacker)
 {
  if (attacker.hasGun())
     shoot(attacker);
  else
     applyMartialArts(attacker);
 }
}
Tinutukoy ng klase ng BodyGuard kung paano haharapin ang isang pag-atake: shoot o gumamit ng martial arts.

Gayunpaman, ang partikular na martial art ay hindi tinukoy, kahit na sigurado kami na ang kasanayan ay umiiral.

Maaari tayong lumikha ng iba't ibang bodyguard (sa pamamagitan ng pagmamana sa klase na ito). Lahat sila ay magagawang protektahan ang kliyente at barilin ang umaatake.

"Tama ka. Ito ay tulad ng isang interface na may ilang mga ipinatupad na pamamaraan."

"Oo, ang ganitong uri ng abstract na klase ay karaniwan sa mga karaniwang klase ng Java SE."