Odporúčaná, 2022

Redakcia Choice

Rozdiel medzi dedičstvom a polymorfizmom

Dedičstvo umožňuje opakovateľnosť kódu a polymorfizmus je výskyt jednej funkcie s inou formou. Základný rozdiel medzi dedičstvom a polymorfizmom spočíva v tom, že dedičstvo umožňuje opätovné využitie už existujúceho kódu v programe a polymorfizmus poskytuje mechanizmus, ktorý dynamicky rozhoduje, akú formu funkcie má byť vyvolaná.

Porovnávacia tabuľka

Základ pre porovnaniededičstvopolymorfizmus
základnéDedičstvo vytvára novú triedu s využitím vlastností už existujúcej triedy.Polymorfizmus je v podstate spoločným rozhraním pre viacnásobnú formu.
uskutočnenieDedičstvo je v zásade implementované na triedach.Polymorfizmus je v zásade implementovaný na funkciu / metódy.
použitiePodporovať koncepciu opakovanej použiteľnosti v OOP a znižuje dĺžku kódu.Umožňuje objekt rozhodnúť, akú formu funkcie sa má spúšťať pri kompilácii času (preťaženie) a času spustenia (overriding).
formuláreDedičnosť môže byť jediné dedičstvo, viacnásobné dedičstvo, viacúrovňové dedičstvo, hierarchické dedičstvo a hybridné dedičstvo.Polymorfizmus môže byť kompilovaný časový polymorfizmus (preťaženie) alebo polymorfizmus behu (prepúšťanie).
príkladTrieda "tabuľka" môže zdediť prvok triedy "nábytok", pretože "stôl" je "nábytok".Trieda 'study_table' môže mať aj funkciu 'set_color ()' a trieda 'Dining_table' môže tiež mať funkciu 'set_color ()', takže akú formu funkcie set_color () čas spustenia.

Definícia dedičstva:

Dedičstvo je jedným z kľúčových prvkov OOP, ktorý výrazne podporuje "opakovanú využiteľnosť". Opätovná využiteľnosť by sa dala opísať ako vytvorenie novej triedy opätovným použitím vlastností existujúcej triedy. V dedičstve existuje základná trieda, ktorú zdedí odvodená trieda. Keď trieda zdedí inú triedu, člen (y) základnej triedy sa stáva členom (členmi) odvodenej triedy.

Všeobecná forma dedenia triedy je nasledovná:

 class derived-class-name: prístupový špecifikátor base-class-name {// body triedy}; 

Tu špecifikátor prístupu poskytuje spôsob prístupu (súkromné, verejné, chránené) členom (členom) v základnej triede k odvodenej triede. Ak nie je k dispozícii špecifikátor prístupu, je predvolene považovaný za "súkromný". V C ++, ak je odvodená trieda "struct", špecifikátor prístupu je predvolene "verejný".

V dedičstve C ++ je možné dosiahnuť dedičnosť v piatich formách. Môžu byť klasifikované ako:

  • Jediné dedičstvo (iba jedna super-trieda)
  • Viacnásobná dedičnosť (niekoľko superclasses)
  • Hierarchické dedičstvo (jedna super trieda, veľa podtried)
  • Viacnásobné dedičstvo (odvodené z odvodenej triedy)

V jazyku Java trieda zdedí druhú triedu pomocou kľúčového slova "extends". V základnej triede je Java označovaná ako superkategória a odvodená trieda sa označuje ako podtrieda. Podtrieda nemôže pristupovať k členom základnej triedy, ktoré sú deklarované ako "súkromné". Všeobecná forma zdedenia triedy v jazyku Java je nasledujúca.

 trieda odvodená od triedy-name rozširuje názov základnej triedy {// body triedy}; 

Java nepodporuje dedičnosť viacnásobného dedičstva, zatiaľ čo podporuje viacúrovňovú hierarchiu. V jazyku Java, niekedy superkategória môže chcieť skryť podrobnosti implementácie a niektoré časti týchto údajov sú "súkromné". Rovnako ako v jazyku Java, podtrieda nemôže pristupovať k súkromným členom nadradenej triedy a ak podtrieda chce pristupovať alebo inicializovať týchto členov, potom Java poskytuje riešenie. Podtrieda môže odkázať členov svojej bezprostrednej superclass pomocou kľúčového slova "super". Pamätajte, že máte prístup len k členom bezprostrednej nadtriedy.

"Super" má dve všeobecné formy. Prvým je, že sa nazývajú konštruktér super triedy. Druhým je prístup k členovi nadtriedy, ktorá bola skrytá členom podtriedy.

 // prvá forma volania konštruktora. class supper_class {supper_class (argument_list) {..} // konštruktér super triedy}; class sub_class rozširuje supper_class {sub_class (argument_list) {..} // konštruktor sub_class super (argument_list); // sub_class volá konštruktéra super triedy}}; 
 // sekunda pre "super" trieda supper_class {int i; } class sub_class rozširuje supper_class {int i; sub_class (int a, int b) {super.i = a; // 'i' super triedy i = b; // 'i' podkategórie}}; 

Definícia polymorfizmu

Termín polymorfizmus jednoducho znamená "jednu funkciu, viaceré formy". Polymorfizmus sa dosahuje tak v čase kompilácie, ako aj v čase prevádzky. Polymorfizmus kompilácie času sa dosahuje prostredníctvom "preťaženia", zatiaľ čo polymorfizmus časového priebehu sa dosahuje prostredníctvom "prevratu".

Polymorfizmus umožňuje objektu rozhodnúť sa "akú formu funkcie sa má vyvolávať, keď" v oboch, kompilovať čas a čas spustenia.
Prediskutujeme prvý koncept preťaženia. Pri preťažení definujeme funkciu v triede viac ako jeden čas s iným typom údajov a počtom parametrov, zatiaľ čo funkcia, ktorá má byť preťažená, musí mať rovnaký typ návratu. Väčšinou sú funkcie preťaženia konštruktérmi triedy.

 preťaženie triedy {int a, b; public: int preťaženie (int x) {// prvé preťaženie () konštruktor a = x; vrátiť a; } int preťaženie (int x, int y) {// druhé preťaženie () konštruktor a = x; b = y; vrátiť a * b; }}; int main () {preťaženie O1; O1.overload (20); // prvé preťaženie () konštruktér volanie O1.overload (20, 40); // druhá preťaženie () volanie konštruktéra} 

Teraz poďme diskutovať o druhej forme polymorfizmu, tj nadradenej. Pojem "overriding" môže byť implementovaný len na funkciu tried, ktoré tiež implementujú koncept dedičstva. V C ++ sa pred funkciou, ktorej sa má prepísať, predchádza kľúčové slovo "virtuálny" v základnej triede a predefinované v odvodenej triede s rovnakým prototypom okrem kľúčového slova "virtual".

 class public {public: virtual void funct () {// virtuálna funkcia základnej triedy cout << "Toto je funkcia základnej triedy ()"; }}; trieda odvodená1: verejná základňa {public: void funct () {// virtuálna funkcia základnej triedy predefinovaná v odvodenej triede cout 

Kľúčové rozdiely medzi dedičstvom a polymorfizmom

  1. Dedičstvo vytvára triedu, ktorá odvodzuje svoju vlastnosť z už existujúcej triedy. Na druhej strane, polymorfizmus je rozhranie, ktoré možno definovať vo viacerých formách.
  2. Dedičstvo sa implementuje na triedy, zatiaľ čo polymorfizmus sa realizuje na metódach / funkciách.
  3. Keďže dedičstvo umožňuje odvodenej triede používať prvky a metódy definované v základnej triede, odvodená trieda nemusí definovať tieto prvky alebo metódu znova, takže môžeme povedať, že zvyšuje opakovateľnosť kódu a tým znižuje dĺžku kódu, Na druhej strane, polymorfizmus umožňuje, aby sa objekt rozhodol, akú formu metódy sa chce odvolávať v čase kompilácie, ako aj v čase behu.
  4. Dedičstvo možno klasifikovať ako jedno dedičstvo, viacnásobné dedičstvo, viacúrovňové dedičstvo, hierarchické dedičstvo a hybridné dedičstvo. Na druhej strane je polymorfizmus klasifikovaný ako preťaženie a prevrat.

záver:

Dedičstvo a polymorfizmus sú vzájomne prepojené koncepty, keďže dynamický polymorfizmus sa vzťahuje na triedy, ktoré tiež implementujú koncepciu dedičnosti.

Top