Abstraktná trieda vs dedičstvo
Abstraktná trieda a dedičnosť sú dva dôležité objektovo orientované koncepty, 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 dedičnosť umožňuje novým triedam rozširovať ďalšie triedy. Abstraktná trieda je trieda, ktorú nemožno inicializovať, ale možno ju rozšíriť. Abstraktné triedy majú teda zmysel len vtedy, ak programovací jazyk podporuje dedičnosť. V jazyku Java sa abstraktné triedy deklarujú pomocou kľúčového slova Abstract, zatiaľ čo kľúčové slovo Extends sa používa na dedenie z (super) triedy.
Čo je abstraktná trieda?
Abstraktné triedy, známe aj ako abstraktné základné triedy (ABC), zvyčajne nemožno vytvoriť inštanciu (inštanciu tejto triedy nemožno vytvoriť). Takže abstraktné triedy majú zmysel len vtedy, ak programovací jazyk podporuje dedičnosť (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, z ktorých sú odvodené podradené triedy, takže podriadená trieda bude zdieľať neúplné vlastnosti nadradenej triedy a na ich dokončenie je možné pridať funkcie.
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éto abstraktné metódy, ide o konkrétnu triedu. Ale ak nie, trieda dieťaťa sa tiež stane abstraktnou triedou. To všetko znamená, že keď programátor nominuje triedu ako abstrakt, hovorí, že trieda bude neúplná a bude mať prvky, ktoré bude potrebné doplniť dediacimi podtriedami. Je to pekný spôsob, ako vytvoriť zmluvu medzi dvoma programátormi, čo zjednodušuje úlohy pri vývoji softvéru. Programátor, ktorý píše kód na dedenie, musí presne dodržiavať definície metód (ale samozrejme môže mať vlastnú implementáciu).
Čo je dedičnosť?
Dedičnosť je objektovo orientovaný koncept, ktorý umožňuje novým triedam rozširovať ďalšie triedy. Kľúčové slovo Extends sa používa na implementáciu konceptu dedičnosti v programovacom jazyku Java. Dedičnosť v podstate poskytuje opätovné použitie kódu tým, že umožňuje rozšírenie vlastností a správania existujúcej triedy o novo definovanú triedu. Keď nová podtrieda (alebo odvodená trieda) rozširuje nadtriedu (alebo rodičovskú triedu), táto podtrieda zdedí všetky atribúty a metódy nadtriedy. Podtrieda môže voliteľne prepísať správanie (poskytovať novú alebo rozšírenú funkčnosť metód) zdedené z nadradenej triedy. Typicky podtrieda nemôže rozšíriť viacero supertried (napr. v jazyku Java). Preto nemôžete použiť rozšírenia pre viacnásobné dedičstvo. Ak chcete získať viacnásobné dedičstvo, musíte použiť rozhrania.
Aký je rozdiel medzi abstraktnou triedou a dedičnosťou?
Abstraktné triedy zvyčajne predstavujú abstraktný koncept alebo entitu s čiastočnou alebo žiadnou implementáciou. Dedičnosť umožňuje novým triedam rozšíriť ďalšie triedy. Pretože abstraktné triedy nemožno vytvárať inštanciami, musíte použiť koncept dedenia, aby ste mohli používať abstraktné triedy. V opačnom prípade nemá abstraktná trieda žiadny význam. Abstraktné triedy môžu obsahovať abstraktné metódy a keď sa trieda rozšíri, zdedia sa všetky metódy (abstraktné a konkrétne). Zdedená trieda môže implementovať ktorúkoľvek alebo všetky metódy. Ak nie sú implementované všetky abstraktné metódy, potom sa aj táto trieda stane abstraktnou triedou. Trieda nemôže dediť z viac ako jednej abstraktnej triedy (toto nie je kvalita abstraktných tried ako taká, ale skôr obmedzenie dedenia).
Súvisiace príspevky:
Rozdiel medzi abstraktnou triedou a konkrétnou triedou
Rozdiel medzi virtuálnym a abstraktným
Rozdiel medzi abstraktnou triedou a rozhraním
Rozdiel medzi implementáciami a rozšíreniami
Rozdiel medzi grafom a stromom
Filed under: Programming Tagged with: ABC, abstract, Abstract Base Classes, Abstract class, Abstract class, Abstract keyword, Abstract Methods, Conkrét class, Extends keyword, Dedičnosť, Trieda dedičnosti, zdedená trieda, Java, viacnásobná dedičnosť, objektovo orientované koncepty, bežná trieda, super trieda
O autorovi: Indika
Indika, BSc. Eng, MSECE Computer Engineering, PhD. Počítačová veda, je odborným asistentom a má výskumné záujmy v oblastiach bioinformatiky, výpočtovej biológie a biomedicínskeho spracovania prirodzeného jazyka.
Komentáre
-
Jason hovorí
30. augusta 2017 o 13:25
Ďakujeme za vysvetlenie rozdielu. Všetky moje otázky boli týmto vyriešené.
Odpovedať
-
Aus hovorí
10. mája 2019 o 15:04
najlepšia odpoveď na webe, Učiteľ nevysvetľuje hovno a nedáva zmysel, monotónne mf. Takto vysvetľujete pojmy.
Odpovedať
Zanechať odpoveď Zrušiť odpoveď
Vaša e-mailová adresa nebude zverejnená. Povinné polia sú označené
Komentár
Meno
Webová stránka