"Szervusz, Amigo! Tegnap az absztrakt órákon tanultál. Most itt az ideje, hogy elmélyítsük tudásunkat. Meg akarlak tanítani, hogyan kell helyesen használni az absztrakt órákat."

Nehéz valós analógiát találni egy absztrakt osztályra. Az osztály általában valamilyen entitás modellje. Egy absztrakt osztály azonban nem implementált metódusokat tartalmaz, és tartalmazhat már megvalósított metódusokat is. Az mit jelent? Milyen analógiát találhatunk egy absztrakt osztályra? Van ilyen a való világban?

Valójában van. Képzelje el egy majdnem kész autó alvázát futószalagon. Beépíthetek akár lehúzott, akár nagy hatékonyságú motort. Akár bőr belsővel, akár szövet kárpittal. Az autó konkrét megvalósítása még nincs meghatározva. Sőt, az alváz több konkrét megvalósítás előállítására is használható. De senki sem szeretné az autót a jelenlegi formájában. Ez egy klasszikus absztrakt osztály : nem lenne értelme példányokat létrehozni belőle, így nem hozható létre; az osztálynak csak az alapján jön létre a sok teljes jogú örökös miatt értelme.

– Ez elég könnyű.

De lehetnek még elvontabb hasonlatok is. Inkább interfészek néhány implementált metódussal. Vegyünk például egy profi tolmácsot . A forrás- és célnyelv megadása nélkül van egy « absztrakt fordítónk ». Vagy gondolj egy testőrre. Tudhatjuk, hogy elsajátította a harcművészeteket, és meg tudja védeni ügyfelét. De hogy melyik harcművészet és hogyan fogja megvédeni az ügyfelet, az az egyes testőrök "megvalósítási részletei".

Nézzünk egy példát:

Java kód Leírás
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);
 }
}
A BodyGuard osztály határozza meg, hogyan kell kezelni egy támadást: lőj vagy használj harcművészeteket.

A konkrét harcművészet azonban nincs meghatározva, bár biztosak vagyunk abban, hogy a készség létezik.

Több különböző testőrt is létrehozhatunk (ezt az osztályt örökölve). Mindegyikük képes lesz megvédeni az ügyfelet és lelőni a támadót.

"Igazad van. Ez nagyon hasonlít egy interfészhez, néhány implementált módszerrel."

"Igen, ez a fajta absztrakt osztály gyakori a szabványos Java SE osztályok között."