"Hej, Amigo! Igår fick du undervisning i abstrakta klasser. Nu är det dags att fördjupa våra kunskaper. Jag vill lära dig hur du använder abstrakta klasser på rätt sätt."

Det är svårt att komma på en analogi från verkligheten för en abstrakt klass. En klass är vanligtvis en modell av någon enhet. Men en abstrakt klass innehåller metoder som inte har implementerats, och kan innehålla metoder som har implementerats. Vad betyder det? Vilken analogi för en abstrakt klass kan vi hitta? Finns det något sådant i den verkliga världen?

Det finns faktiskt. Föreställ dig chassit på en nästan färdig bil på ett löpande band. Jag kan installera antingen en soppad motor eller en mycket effektiv motor. Antingen en läderinredning eller tygklädsel. Bilens specifika implementering är ännu inte fastställd. Dessutom kan chassit användas för att producera flera specifika implementeringar. Men ingen vill ha bilen i sin nuvarande form. Det här är en klassisk abstrakt klass : att skapa instanser av den skulle inte vara meningsfullt, så du kan inte skapa dem; klassen är bara meningsfull på grund av de många fullvärdiga arvingar som kommer att skapas på grundval av den.

"Det är lätt nog."

Men det kan finnas ännu mer abstrakta analogier. Mer som gränssnitt med ett fåtal implementerade metoder. Överväg till exempel en professionell tolk . Utan att specificera käll- och målspråk, har vi en " abstrakt översättare" . Eller överväg en livvakt. Vi kanske vet att han behärskar kampsport och kan skydda sin klient. Men vilken kampsport och hur han kommer att skydda klienten är "implementeringsdetaljer" för varje specifik livvakt.

Låt oss titta på ett exempel:

Java-kod Beskrivning
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);
 }
}
BodyGuard-klassen avgör hur man hanterar en attack: skjut eller använd kampsport.

Den specifika kampsporten är dock inte specificerad, även om vi är säkra på att färdigheten finns.

Vi kan skapa flera olika livvakter (genom att ärva denna klass). Alla kommer att kunna skydda klienten och skjuta angriparen.

"Du har rätt. Det är mycket som ett gränssnitt med några få implementerade metoder."

"Ja, den här typen av abstrakt klass är vanlig bland vanliga Java SE-klasser."