"Hallo, Amigo! Gisteren ben je geschoold in abstracte lessen. Nu is het tijd om onze kennis te verdiepen. Ik wil je leren hoe je abstracte lessen correct gebruikt."

Het is moeilijk om een ​​real-world analogie te bedenken voor een abstracte klasse. Een klasse is meestal een model van een entiteit. Maar een abstracte klasse bevat methoden die niet zijn geïmplementeerd en kan methoden bevatten die wel zijn geïmplementeerd. Wat betekent dat? Welke analogie voor een abstracte klasse kunnen we vinden? Bestaat er zoiets in de echte wereld?

Eigenlijk is er. Stel je het chassis voor van een bijna voltooide auto op een lopende band. Ik kan een opgevoerde motor of een zeer efficiënte motor installeren. Ofwel een lederen interieur of stoffen bekleding. De specifieke uitvoering van de auto staat nog niet vast. Bovendien zou het chassis kunnen worden gebruikt om verschillende specifieke implementaties te produceren. Maar niemand wil de auto in zijn huidige vorm. Dit is een klassieke abstracte klasse : het zou niet logisch zijn om er instanties van te maken, dus je kunt ze niet maken; de klasse heeft alleen zin vanwege de vele volwaardige erfgenamen die op basis daarvan zullen worden gecreëerd.

"Dat is gemakkelijk genoeg."

Maar er kunnen nog meer abstracte analogieën zijn. Meer als interfaces met een paar geïmplementeerde methoden. Denk bijvoorbeeld aan een professionele tolk . Zonder de bron- en doeltalen te specificeren, hebben we een « abstracte vertaler ». Of overweeg een lijfwacht. We weten misschien dat hij vechtsporten beheerst en zijn cliënt kan beschermen. Maar welke vechtsporten en hoe hij de cliënt zal beschermen, zijn "implementatiedetails" van elke specifieke lijfwacht.

Laten we naar een voorbeeld kijken:

Java-code Beschrijving
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);
 }
}
De BodyGuard-klasse bepaalt hoe om te gaan met een aanval: schieten of vechtsporten gebruiken.

De specifieke krijgskunst wordt echter niet gespecificeerd, hoewel we er zeker van zijn dat de vaardigheid bestaat.

We kunnen verschillende bodyguards maken (door deze klasse te erven). Ze kunnen allemaal de klant beschermen en de aanvaller neerschieten.

"Je hebt gelijk. Het lijkt veel op een interface met een paar geïmplementeerde methoden."

"Ja, dit type abstracte klasse komt veel voor bij standaard Java SE-klassen."