Rozdiel medzi virtuálnym a abstraktným

Rozdiel medzi virtuálnym a abstraktným
Rozdiel medzi virtuálnym a abstraktným

Video: Rozdiel medzi virtuálnym a abstraktným

Video: Rozdiel medzi virtuálnym a abstraktným
Video: Релиз Java 17 и Windows 11. Платный Docker и новые MacBook от Apple [MJC News #9] 2024, Júl
Anonim

Virtuálne vs abstraktné

Virtual a Abstract sú dve kľúčové slová používané vo väčšine objektovo orientovaných (OO) programovacích jazykov, ako sú Java a C. Hoci existujú malé rozdiely v tom, čo to znamená v rôznych jazykoch, virtuálne aj abstraktné kľúčové slová poskytujú pocit čiastočnej implementácie pre entity, ku ktorým sa pripájajú.

Abstrakt

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 podradená 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). V Java a C sú abstraktné triedy a metódy deklarované pomocou abstraktného kľúčového slova.

Virtual

Virtuálne metódy/funkcie poskytujú možnosť voliteľne prepísať svoje správanie dedením triedy (pomocou funkcie s rovnakým podpisom). Koncept virtuálnej funkcie je dôležitý v nasledujúcom scenári. Predpokladajme, že triedu odvodila podriadená trieda, potom vždy, keď sa použije objekt odvodenej triedy, môže odkazovať na objekt základnej triedy alebo odvodenej triedy. Ale správanie pri volaní metódy môže byť nejednoznačné, ak sú metódy základnej triedy prepísané. Na vyriešenie tejto nejednoznačnosti sa používa kľúčové slovo Virtual. Ak je metóda označená ako virtuálna, potom sa zavolá funkcia odvodenej triedy (ak existuje) alebo sa zavolá funkcia základnej triedy. Napríklad v C++ sa presne na tento účel používa virtuálne kľúčové slovo. V C sa kľúčové slovo Virtual používa podobným spôsobom, no okrem toho by sa na úpravu všetkých prepísaných metód malo použiť kľúčové slovo override. Ale v Jave neexistuje žiadne explicitné virtuálne kľúčové slovo. Všetky nestatické metódy sa považujú za virtuálne. Virtuálne funkcie bez tela sa nazývajú čisté virtuálne funkcie. V Java a C sú abstraktné metódy v skutočnosti čisté virtuálne.

Rozdiel medzi virtuálnym a abstraktným

Aj keď abstraktné a virtuálne sú dve kľúčové slová/koncepty, ktoré pridruženým entitám poskytujú význam neúplnej implementácie, majú svoje rozdiely. Abstraktné metódy (ktoré musia byť definované v abstraktných triedach) nemajú implementáciu vôbec, zatiaľ čo virtuálne metódy môžu mať implementáciu. Ak sú abstraktné metódy rozšírené o konkrétnu triedu, musia byť implementované všetky zdedené abstraktné metódy, zatiaľ čo zdedené virtuálne metódy môžu, ale nemusia byť prepísané.

Odporúča: