"Hei, Amigo! I går ble du opplært i abstrakte klasser. Nå er det på tide å utdype kunnskapen vår. Jeg vil lære deg hvordan du bruker abstrakte klasser riktig."

Det er vanskelig å komme opp med en analogi fra den virkelige verden for en abstrakt klasse. En klasse er vanligvis en modell av en enhet. Men en abstrakt klasse inneholder metoder som ikke er implementert, og kan inneholde metoder som er implementert. Hva betyr det? Hvilken analogi for en abstrakt klasse kan vi finne? Finnes det noe slikt i den virkelige verden?

Faktisk er det det. Se for deg chassiset til en nesten ferdig bil på et løpende bånd. Jeg kan installere enten en oppsuget motor eller en svært effektiv motor. Enten et skinninteriør eller stofftrekk. Bilens spesifikke implementering er ennå ikke bestemt. Dessuten kan chassiset brukes til å produsere flere spesifikke implementeringer. Men ingen vil ha bilen i sin nåværende form. Dette er en klassisk abstrakt klasse : å lage forekomster av det ville ikke gi mening, så du kan ikke lage dem; klassen gir bare mening på grunn av de mange fullverdige arvinger som vil bli opprettet på grunnlag av den.

"Det er lett nok."

Men det kan være enda mer abstrakte analogier. Mer som grensesnitt med noen få implementerte metoder. Vurder for eksempel en profesjonell tolk . Uten å spesifisere kilde- og målspråk, har vi en « abstrakt oversetter ». Eller vurder en livvakt. Vi vet kanskje at han mestrer kampsport og kan beskytte klienten sin. Men hvilken kampsport og hvordan han vil beskytte klienten er «implementeringsdetaljer» for hver spesifikke livvakt.

La oss 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 angrep: skyt eller bruk kampsport.

Den spesifikke kampsporten er imidlertid ikke spesifisert, selv om vi er sikre på at ferdigheten eksisterer.

Vi kan lage flere forskjellige livvakter (ved å arve denne klassen). Alle vil være i stand til å beskytte klienten og skyte angriperen.

"Du har rett. Det er mye som et grensesnitt med noen få implementerte metoder."

"Ja, denne typen abstrakt klasse er vanlig blant standard Java SE-klasser."