Doporučená, 2024

Redakce Choice

Rozdíl mezi dědictvím a polymorfismem

Dědičnost umožňuje opakovanou 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í, jakou formu funkce má být vyvolána.

Srovnávací graf

Základ pro porovnáníDědictvíPolymorfismus
ZákladníDědičnost vytváří novou třídu s využitím vlastností již existující třídy.Polymorfismus je v podstatě společné rozhraní pro vícenásobnou formu.
ImplementaceDědičnost je v podstatě realizována na hodinách.Polymorfismus je v podstatě implementován na funkci / metodách.
PoužitíPodporovat koncept opakovatelnosti v OOP a snižuje délku kódu.Umožňuje objektu rozhodnout, která forma funkce má být vyvolána při kompilaci (přetížení) a době běhu (přepsání).
formulářeDědičnost může být jedno dědictví, vícenásobné dědictví, víceúrovňové dědictví, hierarchické dědictví a hybridní dědictví.Polymorfismus může být polymorfismus kompilačního času (přetížení) nebo polymorfismus run-time (převažující).
PříkladTřída 'stůl' může zdědit rys třídy 'nábytek', jako '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, se může rozhodnout v obou případech: doba běhu.

Definice dědičnosti:

Dědičnost je jednou z klíčových vlastností OOP, která silně podporuje „opětovné použití“. Opětovnou použitelnost lze popsat jako vytvoření nové třídy opakovaný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í jinou třídu, člen (y) základní třídy se stane členem (ami) odvozené třídy.

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

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

Specifikátor přístupu zde poskytuje režim přístupu (soukromý, veřejný, chráněný) členovi (členům) v základní třídě do odvozené třídy. Pokud není k dispozici žádný specifikátor přístupu, je standardně považován za „soukromý“. Pokud je v C ++ odvozená třída “struct”, pak je specifikátor přístupu standardně “public”.

V C ++ lze dědičnost dosáhnout v pěti formách. Mohou být klasifikovány jako: -

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

V jazyce Java zdědí třída jinou třídu pomocí klíčového slova „extend“. V jazyce Java se základní třída označuje jako super třída a odvozená třída se označuje jako podtřída. Podtřída nemá přístup k členům základní třídy, kteří jsou deklarováni jako „soukromí“. Obecná forma zdědící třídu v Javě je následující.

 třída derivace-class-name rozšiřuje base-class-name {// tělo třídy}; 

Java nepodporuje dědičnost vícenásobné dědičnosti, zatímco podporuje víceúrovňovou hierarchii. Někdy může super třída v Javě skrýt podrobnosti o implementaci a některé části těchto dat jsou „soukromé“. Podobně jako v Javě nemůže podtřída přistupovat k soukromým členům nadtřídy, a pokud chce podtřída přistupovat nebo inicializovat tyto členy, pak Java poskytuje řešení. Podtřída může odkazovat členy své bezprostřední nadtřídy pomocí klíčového slova „super“. Nezapomeňte, že můžete přistupovat pouze k členům bezprostřední nadtřídy.

„Super“ má dvě obecné podoby. Prvním z nich je volání konstruktéra super třídy. Druhým je přístup k členu nadtřídy, který byl skryt pod členem podtřídy.

 // první forma volání konstruktoru. class supper_class {supper_class (argument_list) {..} // konstruktor super třídy}; class sub_class rozšiřuje supper_class {sub_class (argument_list) {..} // konstruktor sub_class super (argument_list); // sub_class nazývá konstruktor super třídy}}; 
 // sekunda pro 'super' třídu supper_class {int i; } třída 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á „jednu funkci, více forem“. Polymorfismu je dosaženo jak v době kompilace, tak v době běhu. Polymorfismus kompilačního času je dosažen prostřednictvím „přetížení“, zatímco polymorfismus doby chodu je dosažen „převažujícím“.

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

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

Pojďme se nyní zabývat druhou formou polymorfismu, tj. Převažující. Pojem převažující může být implementován pouze do funkce tříd, které také realizují koncept dědictví. V jazyce C ++ předchází funkce, která má být přepsána, klíčové slovo „virtuální“ v základní třídě a předefinováno v odvozené třídě se stejným prototypem kromě klíčového slova „virtuální“.

 class base {public: virtual void funct () {// virtuální funkce základní třídy cout << "Toto je funct základní třídy ()"; }}; třída deriv1: public base {public: void funct () {// virtuální funkce základní třídy předefinovaná v cout cout1 

Klíčové rozdíly mezi dědictvím a polymorfismem

  1. Dědičnost vytváří třídu, která vychází z již existující třídy. Na druhé straně, polymorfismus je rozhraní, které může být definováno ve více formách.
  2. Dědičnost je implementována na třídách, zatímco polymorfismus je implementován na metodách / funkcích.
  3. Vzhledem k tomu, ž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 elementy nebo metody znovu definovat, takže můžeme říci, že zvyšuje opakovatelnost kódu, a tudíž snižuje délku kódu. . Na druhou stranu, polymorfismus umožňuje, aby objekt rozhodl, jakou formu metody chce vyvolat v době kompilace a době běhu.
  4. Dědičnost může být klasifikována jako jedno dědictví, vícečetné dědictví, víceúrovňové dědictví, hierarchické dědictví a hybridní dědictví. 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ě provázané koncepty, protože dynamický polymorfismus platí pro třídy, které také realizují koncept dědičnosti.

Top