"Hej, Amigo! I går blev du undervist i abstrakte klasser. Nu er det tid til at uddybe vores viden. Jeg vil gerne lære dig, hvordan du bruger abstrakte klasser korrekt."

Det er svært at komme med en analogi fra den virkelige verden for en abstrakt klasse. En klasse er normalt en model af en enhed. Men en abstrakt klasse indeholder metoder, der ikke er blevet implementeret, og kan indeholde metoder, der er blevet implementeret. Hvad betyder det? Hvilken analogi for en abstrakt klasse kan vi finde? Findes der sådan noget i den virkelige verden?

Faktisk er der. Forestil dig chassiset af en næsten færdig bil på et transportbånd. Jeg kan installere enten en opsuget motor eller en meget effektiv motor. Enten et læderinteriør eller stofindtræk. Bilens specifikke implementering er endnu ikke fastlagt. Desuden kan chassiset bruges til at producere flere specifikke implementeringer. Men ingen vil have bilen i sin nuværende form. Dette er en klassisk abstrakt klasse : at skabe forekomster af det ville ikke give mening, så du kan ikke oprette dem; klassen giver kun mening på grund af de mange fuldgyldige arvinger, der vil blive skabt på grundlag af den.

"Det er nemt nok."

Men der kan være endnu mere abstrakte analogier. Mere som grænseflader med nogle få implementerede metoder. Overvej for eksempel en professionel tolk . Uden at specificere kilde- og målsprog har vi en " abstrakt oversætter ". Eller overvej en livvagt. Vi ved måske, at han mestrer kampsport og kan beskytte sin klient. Men hvilken kampsport og hvordan han vil beskytte klienten er "implementeringsdetaljer" for hver specifik livvagt.

Lad os se på et eksempel:

Java kode Beskrivelse
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 bestemmer, hvordan man skal håndtere et angreb: skyd eller brug kampsport.

Den specifikke kampsport er dog ikke specificeret, selvom vi er sikre på, at færdigheden eksisterer.

Vi kan oprette flere forskellige livvagter (ved at arve denne klasse). Alle vil være i stand til at beskytte klienten og skyde angriberen.

"Du har ret. Det minder meget om en grænseflade med nogle få implementerede metoder."

"Ja, denne type abstrakt klasse er almindelig blandt standard Java SE klasser."