Ajánlott, 2024

Szerkesztő Választása

Az öröklés és a polimorfizmus közötti különbség

Az öröklés lehetővé teszi, a kód újrafelhasználhatósága és a polimorfizmus, az egyik funkció különböző formájú előfordulása. Az öröklés és a polimorfizmus közötti alapvető különbség az, hogy az öröklés lehetővé teszi a már létező kód újbóli felhasználását egy programban, és a polimorfizmus olyan mechanizmust biztosít, amely dinamikusan eldönti, hogy milyen függvényformát kell alkalmazni.

Összehasonlító táblázat

Az összehasonlítás alapjaÖrökléspolimorfizmus
AlapvetőAz öröklés egy új osztályt hoz létre a már meglévő osztály tulajdonságai alapján.A polimorfizmus alapvetően többfajta közös felület.
VégrehajtásAz öröklés alapvetően osztályokon történik.A polimorfizmust alapvetően funkció / módszerek alkalmazzák.
HasználatAz OOP-ban az újrafelhasználhatóság fogalmának támogatása és a kód hosszának csökkentése.Lehetővé teszi az objektum eldöntését, hogy a függvény melyik formáját kell meghívni, amikor fordítási idő (túlterhelés) és a futási idő (felülbírálás) esetén.
FormsAz öröklés egy öröklés, többszörös öröklés, többszintű öröklés, hierarchikus öröklés és hibrid öröklés lehet.A polimorfizmus lehet fordítási idő polimorfizmus (túlterhelés) vagy futásidejű polimorfizmus (felülbírálás).
PéldaAz „asztali” osztály örökölheti a „bútorok” osztályát, hiszen egy „asztal” egy „bútor”.A „study_table” osztálynak is van „set_color ()” funkciója, és egy „Dining_table” osztálynak is van „set_color ()” függvénye, így a set_color () függvény melyik formája határozható meg mindkét fordítási idő és futási idő.

Az öröklés fogalma:

Az öröklés az OOP egyik kulcsfontosságú jellemzője, amely erősen támogatja az „újrafelhasználhatóságot”. Az újrafelhasználhatóságot úgy lehet leírni, mint egy új osztály létrehozását a meglévő osztály tulajdonságainak újrafelhasználásával. Az öröklésben van egy alaposztály, amelyet a származtatott osztály örököl. Ha egy osztály örököl más osztályt, akkor az alaposztály tagja (k) válik egy származtatott osztály tagjává (k).

Az osztály öröklésének általános formája a következő:

 osztály származtatott osztálynév: hozzáférési-specifikáló bázis-osztálynév {// az osztály teste}; 

Itt a hozzáférési specifikátor biztosítja a hozzáférési módot (privát, nyilvános, védett) az alap osztályba tartozó tag (ok) ra a származtatott osztályba. Ha nincs hozzáférési specifikáció, alapértelmezés szerint „magán” -nek minősül. C ++-ban, ha a származtatott osztály „struct”, akkor a hozzáférési specifikáció alapértelmezés szerint „nyilvános”.

A C ++-ban az öröklés öt formában érhető el. Ezek az alábbiak szerint osztályozhatók: -

  • Egyedülálló öröklés (csak egy szuper osztály)
  • Többszörös öröklés (több felső osztály)
  • Hierarchikus öröklés (egy szuper osztály, sok alosztály)
  • Többszörös öröklés (származtatott osztályból származik)

Java-ban az osztály örökli a másik osztályt az „extends” kulcsszó használatával. Java-ban az alaposztályt szuperosztálynak nevezik, és a származtatott osztályt alosztálynak nevezzük. Az alosztály nem férhet hozzá azokhoz az alaposztályokhoz, amelyek „magán” -nak minősülnek. A Java-ban az osztály örökölt általános formája a következő.

 az osztály-eredetű osztálynév kiterjeszti az {class body} osztály-nevét; 

A Java nem támogatja a többszörös öröklés örökségét, míg támogatja a többszintű hierarchiát. Java-ban néha egy szuper osztály elrejtheti a végrehajtási részleteket, és az adatok egy részét "magán" -nek teszi. Mint a Java-ban, egy alosztály nem férhet hozzá a felső osztály privát tagjaihoz, és ha egy alosztály ezeket a tagokat kívánja elérni vagy inicializálni, akkor a Java megoldást kínál. Az alosztály a közvetlen szuperklaszt tagjait a „szuper” kulcsszó segítségével tudja továbbítani. Ne feledje, csak azonnali szuperklaszt tagjait érheti el.

A „szuper” -nek két általános formája van. Az első az, hogy a szuper osztály építőjét hívja. A második az, hogy hozzáférjen a szuperklaszt tagjához, amelyet az alosztály tagja elrejtett.

 // a kivitelező hívásának első formája. class supper_class {supper_class (argument_list) {..} // szuper osztály építője}; class sub_class kiterjeszti a supper_class {sub_class (argument_list) {..} // szub_class szuper konstruktort (argument_list); // sub_class hívja a super class konstruktort}}; 
 // a „szuper” osztályú supper_class {int i; } class sub_class kiterjeszti a supper_class {int i; sub_class (int a, int b) {super.i = a; // az i = b 'i' i 'értéke; // 'i' az alosztályból}}; 

A polimorfizmus meghatározása

A polimorfizmus fogalma egyszerűen csak egy függvényt, több formát jelent. A polimorfizmust a fordítási idő és a futási idő egyaránt elérik. A fordítási idő polimorfizmusát „túlterheléssel” érik el, míg a futási idő polimorfizmusa „felülbírálással” érhető el.

A polimorfizmus lehetővé teszi, hogy az objektum határozza meg, hogy a függvény melyik formáját kell használni, amikor mindkettő összeállítja az időt és a futási időt.
Beszéljük meg a túlterhelés első koncepcióját. Túlterhelés esetén több, mint egy alkalommal definiálunk egy funkciót különböző, adattípussal és a paraméterek számával, míg a túlterhelendő függvénynek ugyanaz a visszatérési típusa. A túlterhelt funkciók többsége az osztály konstruktora.

 osztály túlterhelés {int a, b; nyilvános: int túlterhelés (int x) {// első túlterhelés () konstruktor a = x; vissza a; } int túlterhelés (int x, int y) {// második túlterhelés () konstruktor a = x; b = y; vissza a * b; }}; int main () {O1 túlterhelés; O1.overload (20); // első túlterhelés () konstruktor O1.overload (20, 40); // második túlterhelés () konstruktorhívás} 

Most beszéljünk meg a polimorfizmus második formájáról, vagyis az elsőbbségről. A felülbírálás fogalmát csak azoknak az osztályoknak a funkciójához lehet igazítani, amelyek az öröklés fogalmát is végrehajtják. A C ++-ban a felülbírálandó függvényt a „virtuális” kulcsszó előzi meg, és a definiált osztályban újra definiálva ugyanazzal a prototípussal, kivéve a „virtuális” kulcsszót.

 class base {public: virtual void funct () {// bázisosztály virtuális funkciója << "Ez egy alaposztály funkciója ()"; }}; osztályból származtatott1: nyilvános bázis {public: void funct () {// az alaposztály virtuális függvénye, amely újból definiálva a származtatott 1 osztályú cout 

Az öröklés és a polimorfizmus közötti különbségek

  1. Az öröklés olyan osztályt hoz létre, amely a már meglévő osztályból származik. Másrészt a polimorfizmus egy olyan felület, amely többféle formában definiálható.
  2. Az öröklést az osztályokon hajtják végre, míg a polimorfizmust módszerekkel / funkciókkal hajtják végre.
  3. Mivel az öröklés lehetővé teszi a származtatott osztály számára, hogy az alaposztályban meghatározott elemeket és módszereket használja, a származtatott osztálynak nem kell ezeket az elemeket definiálnia, vagy újra meg kell határozni, azt mondhatjuk, hogy növeli a kód újrafelhasználhatóságát, és így csökkenti a kód hosszát . Másrészről, a polimorfizmus lehetővé teszi, hogy egy objektum eldöntse, milyen formában kívánja felkeresni mind a fordítási idő, mind a futási idő.
  4. Az öröklés egyetlen öröklés, többszörös öröklés, többszintű öröklés, hierarchikus öröklés és hibrid öröklés. Másrészt a polimorfizmus túlterhelésnek és felülbírálásnak minősül.

Következtetés:

Az öröklés és a polimorfizmus egymással összefüggő fogalmak, mivel a dinamikus polimorfizmus azokra az osztályokra vonatkozik, amelyek az öröklés fogalmát is megvalósítják.

Top