Rozdiel medzi dedičstvom a polymorfizmom

Autor: Laura McKinney
Dátum Stvorenia: 1 Apríl 2021
Dátum Aktualizácie: 4 Smieť 2024
Anonim
Rozdiel medzi dedičstvom a polymorfizmom - Technológie
Rozdiel medzi dedičstvom a polymorfizmom - Technológie

Obsah


Dedičnosť umožňuje, opakovaná použiteľnosť kódu a polymorfizmus je výskyt jednej funkcie s odlišnou formou. Základný rozdiel medzi dedičnosťou a polymorfizmom spočíva v tom, že dedičnosť umožňuje opätovné použitie už existujúceho kódu v programe a polymorfizmus poskytuje mechanizmus na dynamické rozhodovanie o tom, ktorú formu funkcie sa má vyvolať.

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

Porovnávacia tabuľka

Základ pre porovnaniededičstvopolymorfizmus
základnéDedičstvo vytvára novú triedu pomocou vlastností už existujúcej triedy.Polymorfizmus je v podstate spoločné rozhranie pre viacero foriem.
uskutočnenieDedičstvo je v zásade implementované na triedach.Polymorfizmus sa v zásade implementuje na funkciu / metódy.
použitiePodporovať koncepciu opätovného použitia v OOP a skrátiť dĺžku kódu.Umožňuje objektu rozhodnúť sa, ktorá forma funkcie sa má vyvolať, keď v čase kompilácie (preťaženie), ako aj za behu (prepísanie).
formuláreDedičnosť môže byť jednoduchá dedičnosť, viacnásobná dedičnosť, viacúrovňová dedičnosť, hierarchická dedičnosť a hybridná dedičnosť.Polymorfizmus môže byť polymorfizmus kompilácie (preťaženie) alebo run-time polymorfizmus (overriding).
príkladStôl triedy môže zdediť funkciu nábytku triedy, pretože stôl je nábytok.Trieda study_table môže mať tiež funkciu set_color () a class Dining_table môže mať tiež funkciu set_color (), takže o ktorej forme funkcie set_color (), ktorá sa má vyvolať, sa dá rozhodnúť súčasne, kompilácia a čas spustenia.


Definícia dedičstva:

Dedičnosť je jednou z kľúčových vlastností OOP, ktorá silne podporuje „opätovné použitie“. Opätovné použitie sa dá opísať ako vytvorenie novej triedy opätovným použitím vlastností existujúcej triedy. V dedičstve je základná trieda, ktorú dedí odvodená trieda. Keď trieda zdedí akúkoľvek inú triedu, člen (y) základnej triedy sa stane členom (členmi) odvodenej triedy.

Všeobecná forma zdedenia triedy je nasledovná:

class odvodená-class-name: access-specifier base-class-name {// telo triedy};

Tu špecifikátor prístupu poskytuje spôsob prístupu (súkromný, verejný, chránený) k členom (členom) v základnej triede k odvodenej triede. Ak nie je k dispozícii žiadny špecifikátor prístupu, štandardne sa považuje za „súkromný“. V prípade C ++, ak je odvodená trieda „struct“, špecifikátor prístupu je v predvolenom nastavení „public“.


V C ++ možno dedičstvo dosiahnuť v piatich formách. Môžu byť klasifikované ako:

  • Jednotné dedičstvo (iba jedna super trieda)
  • Viacnásobné dedičstvo (niekoľko nadtried)
  • Hierarchické dedičstvo (jedna nadtrieda, veľa podtried)
  • Viacnásobné dedičstvo (odvodené z odvodenej triedy)

V jazyku Java trieda zdedí druhú triedu pomocou kľúčového slova „rozširuje“. V Java je základná trieda označovaná ako nadtrieda a odvodená trieda sa označuje ako podtrieda. Podtrieda nemá prístup k členom základnej triedy, ktorí sú vyhlásení za „súkromní“. Všeobecná forma zdediaca triedu v jazyku Java je nasledovná.

class odvodená-class-name rozširuje názov základnej triedy {// telo triedy};

Java nepodporuje dedenie viacnásobného dedičstva, zatiaľ čo podporuje viacúrovňovú hierarchiu. V jazyku Java niekedy môže super trieda chcieť skryť podrobnosti o jej implementácii, a preto je časť týchto údajov „súkromná“. Podobne ako v Jave nemôže podtrieda získať prístup k súkromným členom nadtriedy a ak chce podtrieda pristupovať alebo inicializovať týchto členov, Java poskytuje riešenie. Podtrieda môže odkazovať na členov svojej okamžitej nadtriedy pomocou kľúčového slova „super“. Pamätajte, že máte prístup iba k členom okamžitej nadtriedy.

„Super“ má dve všeobecné formy. Prvý je, že sa používa na volanie konštruktora super triedy. Druhým je prístup k členu nadtriedy, ktorý bol skrytý členom podtriedy.

// prvá forma volania konštruktora. class supper_class {supper_class (argument_list) {..} // konstruktor super triedy}; class sub_class rozširuje supper_class {sub_class (argument_list) {..} // konštruktor superkategórie sub_class (argument_list); // sub_class volá konštruktor super triedy}};

// sekundu pre super triedu supper_class {int i; } class sub_class rozširuje supper_class {int i; podskupina (int a, int b) {super.i = a; // i nadtriedy i = b; // i podtriedy}};

Definícia polymorfizmu

Pojem polymorfizmus jednoducho znamená „jedna funkcia, viac foriem“. Polymorfizmus je dosiahnutý ako pri kompilácii, tak pri behu. Polymorfizmus kompilácie je dosiahnutý pomocou „preťaženia“, zatiaľ čo polymorfizmus za behu je dosiahnutý „premostením“.

Polymorfizmus umožňuje objektu rozhodnúť sa, „ktorá forma funkcie sa má vyvolať, keď“ v čase kompilácie aj v čase vykonávania.
Poďme diskutovať o prvom koncepte preťaženia. Pri preťažení definujeme funkciu v triede viac ako jedenkrát s rôznym typom údajov a počtom parametrov, zatiaľ čo funkcia, ktorá sa má preťažiť, musí mať rovnaký typ návratu. Funkcie preťaženia sú väčšinou konštruktéri triedy.

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

Teraz si preberieme druhú formu polymorfizmu, t. J. Prvoradú. Koncepciu nadradenosti možno implementovať iba do funkcie tried, ktoré tiež implementujú koncepciu dedičstva. V C ++ je funkcii, ktorá sa má prepísať, predradené kľúčové slovo „virtual“ v základnej triede a predefinované v odvodenej triede s rovnakým prototypom okrem kľúčového slova „virtual“.

class base {public: virtual void funct () {// virtuálna funkcia cout základnej triedy << "Toto je funct () základných tried"; "; }}; class deriv1: public base {public: void funct () {// virtuálna funkcia základnej triedy predefinovaná v co1 odvodenej triedy1 << "Toto je derivovaná trieda funct ()"; }}; int main () {base * p, b; odvodené1 dl; * P = b; p-> Funct (); // volanie funkcie funct (). * P = d1; návrat 0; }

  1. Dedičnosť vytvára triedu, ktorá odvodzuje jej vlastnosť z už existujúcej triedy. Na druhej strane polymorfizmus je rozhranie, ktoré možno definovať vo viacerých formách.
  2. Dedičstvo je implementované na triedach, zatiaľ čo polymorfizmus je implementovaný na metódach / funkciách.
  3. Pretože dedičnosť umožňuje odvodenej triede používať prvky a metódy definované v základnej triede, odvodená trieda nemusí tieto prvky definovať alebo ich znova definovať, takže môžeme povedať, že zvyšuje opakovanú použiteľnosť kódu, a teda znižuje dĺžku kódu. , Na druhej strane polymorfizmus umožňuje objektu rozhodnúť sa, akú formu metódy chce použiť pri kompilácii aj pri behu.
  4. Dedičnosť 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 prekonanie.

záver:

Dedičnosť a polymorfizmus sú vzájomne prepojené koncepty, keďže dynamický polymorfizmus sa uplatňuje na triedy, ktoré implementujú aj koncept dedičnosti.