Rozdiel medzi rozhraním a triedou abstraktov v jazyku Java a C #

Autor: Laura McKinney
Dátum Stvorenia: 1 Apríl 2021
Dátum Aktualizácie: 5 Smieť 2024
Anonim
Rozdiel medzi rozhraním a triedou abstraktov v jazyku Java a C # - Technológie
Rozdiel medzi rozhraním a triedou abstraktov v jazyku Java a C # - Technológie

Obsah


Rozhranie aj trieda abstraktov prispievajú k „neúplnému typu“ v OOP. Niekedy potrebujeme nadtriedu, aby sme mohli definovať „čo robiť“, ale nie „ako to robiť“, je to, ako sa časť zúčastní implementovaná odvodená trieda podľa jej potreby, „rozhranie”Poskytnúť riešenie. Niekedy potrebujeme nadtriedu, ktorá definuje nejakú zovšeobecnenú štruktúru, ktorú môžu implementovať odvodené triedy, a určitú špecifikovanú štruktúru, ktorú môžu odvodené triedy využiť, “abstraktná trieda“Poskytuje riešenie. Základný rozdiel medzi rozhraním a abstraktnou triedou spočíva v tom, že rozhranie je úplne neúplné a abstraktná trieda je čiastočne neúplná.

  1. Porovnávacia tabuľka
  2. definícia
  3. Kľúčové rozdiely
  4. záver

Porovnávacia tabuľka

Základ pre porovnanieRozhranieAbstraktná trieda
základnéAk máte len vedomosti o požiadavkách a nie o ich implementácii, použijete „Rozhranie“.Keď čiastočne viete o implementáciách, používate „Abstraktné triedy“.
metódyRozhranie obsahuje iba abstraktné metódy.Abstraktná trieda obsahuje abstraktné metódy, ako aj konkrétne metódy.
Prístup k modifikátorom metódMetódy rozhrania sú vždy „verejné“ a „abstraktné“, aj keď ich nevyhlásime. Preto možno povedať, že je to 100%, čisto abstraktná trieda.Nie je povinné, aby metóda v abstraktnej triede bola verejná a abstraktná. Môže mať aj konkrétne metódy.
Obmedzený modifikátor pre metódyMetódu rozhrania nie je možné deklarovať pomocou nasledujúcich modifikátorov:
Verejné: súkromné ​​a chránené
Abstrakt: final, static, synchronized, native, strictfp.
Neexistujú žiadne obmedzenia týkajúce sa modifikátorov abstraktnej premennej triedy.
Prístup k modifikátorom premennýchModifikátor prístupu povolený pre premenné rozhrania je verejný, statický a konečný bez ohľadu na to, či deklarujeme alebo nie.Premenné v abstraktnej triede nemusia byť verejné, statické, konečné.
Obmedzené modifikátory premennýchPremenné rozhrania nie je možné deklarovať ako súkromné, chránené, prechodné, volatilné.Neexistuje žiadne obmedzenie modifikátorov abstraktných premenných triedy.
Inicializácia premennýchPremenné rozhrania sa musia inicializovať v čase jeho vyhlásenia.Nie je povinné, aby sa abstraktné premenné triedy inicializovali v čase jej vyhlásenia.
Inštancie a statické blokyVo vnútri rozhrania nemôžete deklarovať inštanciu alebo statický blok.Abstraktná trieda umožňuje vo vnútri inštanciu alebo statický blok.
konštruktériVo vnútri rozhrania nemôžete deklarovať konštruktora.Konštruktora môžete deklarovať v abstraktnej triede.


Definícia rozhrania

Java nepovoľuje viacnásobné dedičstvo. To znamená, že jedna trieda nemôže zdediť naraz viac ako jednu triedu. Dôvod, ktorý je za tým, sa dá vysvetliť príkladom. Predpokladajme, že máme dve rodičovské triedy, A a B a odvodenú triedu C. Odvodená trieda C dedí triedy A aj B.Teraz majú triedu A aj B metódu set (), potom pre triedu C bude otázkou, ktorú metódu triedy set () by mala dediť. Riešením tohto problému je „rozhranie“.

Rozhranie je čisto abstraktná trieda. Kľúčové slovo použité na vytvorenie rozhrania je „rozhranie“. Pretože všetky metódy vo vnútri rozhrania sú úplne abstraktné. Rozhranie špecifikuje iba to, čo trieda musí urobiť, ale nedefinuje, ako to robí. Pretože všetky metódy deklarované vo vnútri rozhrania sú abstraktné, pre rozhranie sa nevytvorí žiadna inštancia. Všeobecná forma „rozhrania“ v jave je:


access_specifier rozhranie interface_name {return-type method-name1 (parameter-list); return-type method-name2 (zoznam parametrov); type final-varname1 = hodnota; type final-varname2 = value; // ... metóda návratu typu-name N (zoznam parametrov); type final-varnameN = hodnota; }

Špecifikátor prístupu je vyhlásený za verejný, pretože triedy musia implementovať rozhranie.

V C ++ nemáme pojem „rozhranie“. Java a C # však rozhranie definujú veľmi dobre.

Rozhranie v jazyku Java:

  • Premenné rozhrania sú štandardne vždy verejné, statické a konečné.
  • Premenné sa musia inicializovať pri vyhlásení.
  • Premenné nie je možné nikdy vyhlásiť za súkromné, chránené, prechodné a nestále.
  • Metódy rozhrania sú vždy verejné a abstraktné, zatiaľ čo nikdy nemôžu byť vyhlásené za súkromné, chránené, konečné, statické, synchronizované, natívne a striktné.
  • Nemožno deklarovať žiadneho konštruktora vo vnútri rozhrania, pretože hlavným účelom konštruktora je inicializácia premenných triedy, ale premenné rozhrania sa inicializujú v čase jeho deklarovania.
  • Rozhranie môže zdediť iné rozhrania, ale trieda implementujúca takéto rozhranie musí implementovať metódy všetkých zdedených rozhraní.
  • Trieda môže zdediť viac ako jedno rozhranie súčasne a musí implementovať všetky metódy všetkých zdedených rozhraní.

Všeobecná forma implementácie rozhrania v jazyku Java:

class class_name implementuje Interface_name {// class-body}

Na zdedenie rozhrania trieda používa kľúčové slovo „implementuje“ a trieda implementuje všetky metódy deklarované zdedeným rozhraním.

Rozhranie v C #:

Rozhranie v jazyku C # je takmer podobné rozhraniu v jazyku Java s výnimkou:

  • Rozhranie v C # deklaruje premenné.
  • Názov rozhrania je označený veľkým písmenom I a je zdedený dvojbodkou (:).

Všeobecná forma implementácie rozhrania v jazyku C #:

class class_name: interface_name {// class-body}

Definícia abstraktnej triedy

Trieda, ktorá obsahuje jednu alebo viac abstraktných metód, sa nazýva abstraktná trieda a trieda sa deklaruje ako abstraktná pomocou kľúčového slova „abstrakt“, ktorému predchádza kľúčové slovo „class“ na začiatku deklarácie triedy. Pretože abstraktná trieda obsahuje abstraktnú metódu, predstavuje neúplný typ. Preto nemôžete vytvárať objekty abstraktnej triedy. Kedykoľvek trieda zdedí abstraktnú triedu, musí implementovať všetky abstraktné metódy abstraktnej triedy, ak tak neurobí, musí sa tiež deklarovať ako abstrakt. Abstraktný atribút sa dedí, až kým sa nedosiahne úplná implementácia abstraktných metód.

Abstraktná trieda môže tiež obsahovať konkrétne metódy, ktoré môže odvodená trieda použiť tak, ako sú. V abstraktnej triede však nemôžete deklarovať abstraktného konštruktora ani abstraktnú statickú metódu. Všeobecná forma abstraktnej triedy v Java je nasledovná:

abstraktná trieda class_name {abstrakt method_name1 (); abstraktný názov_ metódy2 (); : return_type method_name3 (parameter_list) {// konkrétna metóda} return_type method_name4 (parameter_list) {// konkrétna metóda}};

Koncept abstraktnej triedy je podobný v Java aj C #. Abstraktná trieda sa mierne líši v C ++.

Ak má trieda aspoň jednu virtuálnu funkciu, trieda sa v C ++ stáva abstraktnou triedou. Namiesto kľúčového slova „abstrakt“ sa na deklaráciu abstraktnej metódy používa kľúčové slovo „virtual“.

  1. Ak máte vedomosti o tom, „čo sa vyžaduje“, ale nie o tom, „ako by sa implementovalo“, musí sa použiť rozhranie. Na druhej strane, ak viete, čo je potrebné a čiastočne viete, ako by sa implementovala, použite abstraktnú triedu.
  2. Rozhranie má všetky svoje metódy abstraktné, ale abstraktná trieda má niektoré abstraktné metódy a niektoré konkrétne metódy.
  3. Metódy vo vnútri rozhrania sú verejné a abstraktné, preto sa tiež nazývajú čisto abstraktnou triedou. Na druhej strane metódy vo výhrade nie sú obmedzené iba na verejné a abstraktné.
  4. Metóda rozhrania nemôže byť nikdy súkromná, chránená, konečná, statická, synchronizovaná, natívna alebo striktná. Na druhej strane neexistujú žiadne obmedzenia pre metódy abstraktnej triedy.
  5. Premenné v rozhraní sú verejné a konečné, bez ohľadu na to, či ich deklarujeme, alebo nie, zatiaľ čo premenné v abstraktnej triede nie sú také obmedzenia, ktoré sú iba verejné a konečné.
  6. Premenné v rozhraní nikdy nemôžu byť súkromné ​​chránené ako prechodné alebo nestále, zatiaľ čo premenné v abstraktnej triede neexistujú.
  7. Premenná rozhrania musí byť inicializovaná počas deklarovania. Na druhej strane môžu byť premenné v abstraktnej triede kedykoľvek inicializované.
  8. Vo vnútri rozhrania nie je možné deklarovať inštanciu alebo statický blok, ale inštanciu alebo statický blok môžete deklarovať vnútri abstraktnej triedy.
  9. Konštruktor nie je možné definovať vo vnútri rozhrania, zatiaľ čo konštruktor môžete definovať v abstraktnej triede.

záver:

Ak potrebujete vytvoriť základnú triedu, ktorá obsahuje zovšeobecnenú formu metód, ktoré môžu odvodené triedy implementovať podľa svojich potrieb, pomáha pri tom koncepcia rozhrania a abstraktnej triedy.