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. |
Implementace | Dě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áře | Dě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říklad | Tří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 cout1Klíčové rozdíly mezi dědictvím a polymorfismem
- 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.
- Dědičnost je implementována na třídách, zatímco polymorfismus je implementován na metodách / funkcích.
- 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.
- 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.