Abstract Class vs Interface
Abstraktná trieda a rozhranie sú dva objektovo orientované konštrukty, ktoré sa nachádzajú v mnohých objektovo orientovaných programovacích jazykoch, ako je Java. Abstraktnú triedu možno považovať za abstraktnú verziu bežnej (konkrétnej) triedy, zatiaľ čo rozhranie možno považovať za prostriedok na vykonanie zmluvy. Abstraktná trieda je trieda, ktorú nemožno inicializovať, ale je možné ju rozšíriť. Rozhranie je typ, ktorý musia implementovať iné triedy. V Jave sú triedy Abstract deklarované pomocou kľúčového slova Abstract, zatiaľ čo kľúčové slovo interface sa používa na definovanie rozhrania.
Čo je abstraktná trieda?
Zvyčajne nie je možné vytvárať inštancie abstraktných tried, známych tiež ako abstraktné základné triedy (ABC) (nemožno vytvoriť inštanciu tejto triedy). Abstraktné triedy teda majú zmysel, iba ak programovací jazyk podporuje dedenie (schopnosť vytvárať podtriedy z rozšírenia triedy). Abstraktné triedy zvyčajne predstavujú abstraktný koncept alebo entitu s čiastočnou alebo žiadnou implementáciou. Preto abstraktné triedy fungujú ako nadradené triedy, od ktorých sa odvodzujú podradené triedy, takže podradená trieda bude zdieľať neúplné vlastnosti nadradenej triedy a na ich dokončenie je možné pridať funkčnosť.
Abstraktné triedy môžu obsahovať abstraktné metódy. Podtriedy rozširujúce abstraktnú triedu môžu implementovať tieto (zdedené) abstraktné metódy. Ak podradená trieda implementuje všetky také abstraktné metódy, je to konkrétna trieda. Ak to však nie je možné, z detskej triedy sa stane aj abstraktná trieda. Čo to znamená, je to, že keď programátor nominuje triedu ako abstrakt, hovorí, že trieda bude neúplná a bude obsahovať prvky, ktoré je potrebné doplniť dediacimi podtriedami. Toto je pekný spôsob vytvorenia zmluvy medzi dvoma programátormi, čo zjednodušuje úlohy pri vývoji softvéru. Programátorka, ktorá píše kód na zdedenie, musí presne dodržiavať definície metódy (samozrejme môže mať vlastnú implementáciu).
Čo je to rozhranie?
Rozhranie je abstraktný typ, ktorý sa používa na určenie zmluvy, ktorú by mali implementovať triedy, ktoré dané rozhranie implementujú. Kľúčové slovo interface sa používa na definovanie rozhrania a kľúčové slovo Implements sa používa na implementáciu rozhrania triedou (v programovacom jazyku Java). Rozhranie bude zvyčajne obsahovať iba podpisy metód a neustále vyhlásenia. Každé rozhranie, ktoré implementuje konkrétne rozhranie, by malo implementovať všetky metódy definované v rozhraní alebo by malo byť deklarované ako abstraktná trieda. V prostredí Java je možné typ odkazu na objekt definovať ako typ rozhrania. Ale tento objekt musí mať buď hodnotu null, alebo by mal obsahovať objekt triedy, ktorá implementuje dané rozhranie. Pomocou kľúčového slova Implements v Jave môžete implementovať viac rozhraní do jednej triedy.
Aký je rozdiel medzi abstraktnou triedou a rozhraním?
Abstraktné triedy zvyčajne predstavujú abstraktný koncept alebo entitu s čiastočnou alebo žiadnou implementáciou. Na druhej strane, rozhranie je abstraktný typ, ktorý sa používa na určenie zmluvy, ktorá by mala byť implementovaná triedami. Abstraktné triedy by mali byť zdedené (alebo rozšírené), zatiaľ čo rozhrania by mali byť implementované. Abstraktné triedy môžu obsahovať abstraktné metódy, zatiaľ čo rozhranie by malo obsahovať iba abstraktné metódy. Abstraktné triedy môžu obsahovať akékoľvek premenné, ale rozhrania môžu definovať iba konštanty. Trieda nemôže dediť z viac ako jednej abstraktnej triedy, ale môže implementovať viac rozhraní. Rozhranie nemôže implementovať iné rozhranie. Rozhranie však môže rozšíriť triedu.