Rozdíl mezi dědičností a polymorfismem

Autor: Laura McKinney
Datum Vytvoření: 1 Duben 2021
Datum Aktualizace: 8 Smět 2024
Anonim
Rozdíl mezi dědičností a polymorfismem - Technologie
Rozdíl mezi dědičností a polymorfismem - Technologie

Obsah


Dědičnost umožňuje, opakovaná použitelnost kódu a polymorfismus je výskyt jedné funkce s jinou formou. Základní rozdíl mezi dědičností a polymorfismem spočívá v tom, že dědičnost umožňuje opětovné použití již existujícího kódu v programu a polymorfismus poskytuje mechanismus pro dynamické rozhodování o tom, jakou formu funkce bude vyvolána.

  1. Srovnávací tabulka
  2. Definice
  3. Klíčové rozdíly
  4. Závěr

Srovnávací tabulka

Základ pro srovnáníDědictvíPolymorfismus
ZákladníDědičnost vytváří novou třídu pomocí vlastností již existující třídy.Polymorfismus je v podstatě běžné rozhraní pro více forem.
ImplementaceDědičnost je v zásadě implementována na třídách.Polymorfismus je v zásadě implementován na funkci / metody.
PoužitíPodporovat koncept opakovaného použití v OOP a zkrátit délku kódu.Umožňuje objektu rozhodnout, která forma funkce má být vyvolána, když v době kompilace (přetížení) i době běhu (přepsání).
formulářeDědičnost může být jedna dědičnost, vícenásobná dědičnost, víceúrovňová dědičnost, hierarchická dědičnost a hybridní dědičnost.Polymorfismus může být polymorfismus kompilace (přetížení) nebo run-time polymorfismus (overriding).
PříkladStůl třídy může zdědit rys třídy nábytku, protože stůl je nábytek.Třída Study_table může mít také funkci set_color () a třída Dining_table může mít také funkci set_color (), takže o které formě funkce set_color (), která se má vyvolat, lze rozhodnout jak při kompilaci, tak za běhu.


Definice dědičnosti:

Dědičnost je jednou z klíčových vlastností OOP, která silně podporuje „opakovatelnost“. Opětovné použití lze označit jako vytvoření nové třídy opětovným použitím vlastností stávající třídy. V dědičnosti existuje základní třída, která je zděděna odvozenou třídou. Když třída zdědí jakoukoli jinou třídu, člen (y) základní třídy se stane členem (členy) odvozené třídy.

Obecná forma zdědění třídy je následující:

class deriv-class-name: access-specifier base-class-name {// tělo třídy};

Zde specifikátor přístupu poskytuje způsob přístupu (soukromý, veřejný, chráněný) k členům v základní třídě k odvozené třídě. Pokud není zadán žádný specifikátor přístupu, je ve výchozím nastavení považován za „soukromý“. V C ++, pokud je odvozená třída „struct“, pak je specifikátor přístupu ve výchozím nastavení „public“.


V C ++ lze dědičnosti dosáhnout v pěti formách. Lze je klasifikovat jako: -

  • Single dědičnost (pouze jedna super třída)
  • Vícenásobná dědičnost (několik nadtříd)
  • Hierarchická dědičnost (jedna super třída, mnoho podtříd)
  • Vícenásobná dědičnost (odvozená z odvozené třídy)

V Javě třída zdědí druhou třídu pomocí klíčového slova „rozšíření“. V Javě je základní třída označována jako super třída a odvozená třída je označována jako podtřída. Podtřída nemá přístup k těm členům základní třídy, kteří jsou prohlášeni za „soukromí“. Obecná forma zdědit třídu v Javě je následující.

class derived-class-name rozšiřuje jméno-class-name {// tělo třídy};

Java nepodporuje dědičnost vícenásobného dědičnosti, zatímco podporuje víceúrovňovou hierarchii. V Javě může někdy super třída chtít skrýt její implementační podrobnosti a některé části těchto dat je „soukromá“. Stejně jako v Javě nemůže podtřída přistupovat k soukromým členům nadřazené třídy a pokud chce podtřída přistupovat k těmto členům nebo je inicializovat, Java poskytuje řešení. Podtřída může odkazovat členy své bezprostřední nadřazené třídy pomocí klíčového slova „super“. Pamatujte, že máte přístup pouze k členům okamžité nadřazené třídy.

„Super“ má dvě obecné podoby. První je, že se používá k tomu, aby se nazýval konstruktor super třídy. Druhým je přístup k členu nadřazené třídy, který byl skrylen členem podtřídy.

// první forma volání konstruktoru. class supper_class {supper_class (argument_list) {..} // konstruktor super třídy}; třída sub_class rozšiřuje supper_class {sub_class (argument_list) {..} // konstruktor sub_class super (argument_list); // sub_class volá konstruktor super třídy}};

// sekunda pro super třídu supper_class {int i; } class sub_class rozšiřuje supper_class {int i; sub_class (int a, int b) {super.i = a; // i super třídy i = b; // i podtřídy}};

Definice polymorfismu

Termín polymorfismus jednoduše znamená „jedna funkce, více forem“. Polymorfismus je dosažen jak při kompilaci, tak při běhu. Polymorfismus kompilačního času je dosažen „přetížením“, zatímco polymorfismus běhového času je dosažen „překlenutím“.

Polymorfismus umožňuje objektu rozhodnout „která forma funkce má být vyvolána, když“ v době kompilace i běhu.
Pojďme diskutovat o prvním konceptu přetížení. Při přetížení definujeme funkci ve třídě více než jednou s odlišným typem dat a počtem parametrů, zatímco funkce, která má být přetížena, musí mít stejný typ návratu. Funkce přetížení jsou většinou konstruktéry třídy.

přetížení třídy {int a, b; public: int overload (int x) {// první konstruktor overload () a = x; vrátit a; } int přetížení (int x, int y) {// druhý konstruktor přetížení () a = x; b = y; návrat a * b; }}; int main () {přetížení O1; O1.overload (20); // první volání konstruktoru overload () O1.overload (20,40); // druhé volání konstruktoru přetížení ()}

Nyní pojďme diskutovat o druhé formě polymorfismu, tj. Prvořadé. Koncept nadřazenosti může být implementován pouze do funkce tříd, které také implementují koncept dědičnosti. V C ++ funkci, která má být přepsána, předchází klíčové slovo „virtuální“ v základní třídě a předefinované v odvozené třídě se stejným prototypem kromě klíčového slova „virtuální“.

class base {public: virtual void funct () {// virtuální funkce cout základní třídy << "Toto je základní funkce funct ()"; }}; class deriv1: public base {public: void funct () {// virtuální funkce základní třídy předefinovaná v co1 odvozené třídy1 << "Toto je derived classs funct ()"; }}; int main () {base * p, b; odvozeno1 dl; * p = & b; p-> funct (); // volání funkce základní třídy (). * p = & d1; návrat 0; }

  1. Dědičnost vytváří třídu, která odvozuje její vlastnost z již existující třídy. Na druhé straně je polymorfismus rozhraním, které lze definovat v několika podobách.
  2. Dědičnost je implementována na třídách, zatímco polymorfismus je implementován na metodách / funkcích.
  3. Protože dědičnost umožňuje odvozené třídě používat prvky a metody definované v základní třídě, odvozená třída nemusí tyto prvky definovat nebo ji znovu definovat, takže můžeme říci, že zvyšuje opakovatelnost kódu a tím snižuje délku kódu . Na druhé straně polymorfismus umožňuje, aby se objekt rozhodl, jakou formu metody chce vyvolat jak při kompilaci, tak za běhu.
  4. Dědičnost lze klasifikovat jako jednu dědičnost, vícenásobnou dědičnost, víceúrovňovou dědičnost, hierarchickou dědičnost a hybridní dědičnost. Na druhé straně je polymorfismus klasifikován jako přetížení a převažující.

Závěr:

Dědičnost a polymorfismus jsou vzájemně propojené pojmy, protože dynamický polymorfismus se vztahuje na třídy, které také implementují koncept dědičnosti.