"Bună, Amigo! Ieri ai fost instruit în modurile de curs abstracte. Acum este timpul să ne aprofundăm cunoștințele. Vreau să te învăț cum să folosești corect orele abstracte."

Este dificil să vină cu o analogie reală pentru o clasă abstractă. O clasă este de obicei un model al unei entități. Dar o clasă abstractă conține metode care nu au fost implementate și poate conține metode care au fost implementate. Ce înseamnă asta? Ce analogie pentru o clasă abstractă putem găsi? Există așa ceva în lumea reală?

De fapt, există. Imaginează-ți șasiul unei mașini aproape terminate pe o bandă transportoare. Pot instala fie un motor complet, fie un motor foarte eficient. Fie un interior din piele, fie o tapițerie din material textil. Implementarea specifică a mașinii nu este încă determinată. În plus, șasiul ar putea fi folosit pentru a produce mai multe implementări specifice. Dar nimeni nu vrea mașina în forma ei actuală. Aceasta este o clasă abstractă clasică : crearea unor instanțe ale acesteia nu ar avea sens, așa că nu le puteți crea; clasa are sens doar din cauza numeroșilor moștenitori cu drepturi depline care vor fi creați pe baza ei.

— E destul de ușor.

Dar pot exista analogii chiar mai abstracte. Mai mult ca interfețe cu câteva metode implementate. De exemplu, luați în considerare un interpret profesionist . Fără a specifica limbile sursă și țintă, avem un „ traducător abstract ”. Sau ia în considerare un bodyguard. S-ar putea să știm că stăpânește artele marțiale și își poate proteja clientul. Dar care arte marțiale și cum va proteja clientul sunt „detalii de implementare” ale fiecărui bodyguard specific.

Să ne uităm la un exemplu:

Cod Java Descriere
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);
 }
}
Clasa BodyGuard determină cum să faci față unui atac: împușcă sau folosește arte marțiale.

Cu toate acestea, arta marțială specifică nu este specificată, deși suntem siguri că abilitatea există.

Putem crea mai multe bodyguarzi diferite (prin moștenirea acestei clase). Toți vor putea să protejeze clientul și să împuște atacatorul.

"Ai dreptate. Seamănă mult cu o interfață cu câteva metode implementate."

„Da, acest tip de clasă abstractă este comună printre clasele standard Java SE.”