Összehasonlító táblázat
Az összehasonlítás alapja | Öröklés | polimorfizmus |
---|---|---|
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ás | Az öröklés alapvetően osztályokon történik. | A polimorfizmust alapvetően funkció / módszerek alkalmazzák. |
Használat | Az 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. |
Forms | Az ö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élda | Az „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ú coutAz öröklés és a polimorfizmus közötti különbségek
- 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ó.
- Az öröklést az osztályokon hajtják végre, míg a polimorfizmust módszerekkel / funkciókkal hajtják végre.
- 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ő.
- 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.