Prepisovanie vs preťažovanie
Metóda Overriding a Method Overloading sú dva koncepty/techniky/funkcie nachádzajúce sa v niektorých programovacích jazykoch. Oba koncepty umožňujú programátorovi poskytovať rôzne implementácie pre metódy s rovnakým názvom. Prepísanie metódy umožňuje programátorovi poskytnúť alternatívnu implementáciu v rámci podtriedy k metóde, ktorá je už definovaná v jej nadtriede. Preťaženie metód umožňuje programátorovi poskytnúť rôzne implementácie viacerým metódam s rovnakým názvom (v rámci rovnakej triedy).
Čo má prednosť?
Ako je uvedené vyššie, trieda môže rozšíriť supertriedu alebo nadradenú triedu v objektovo orientovaných programovacích jazykoch. Podradená trieda môže mať svoje vlastné metódy alebo môže mať voliteľne svoje vlastné implementácie metód, ktoré sú už definované v jej rodičovskej triede (alebo v jednej z jej veľkých rodičovských tried). Keď sa to stane, nazýva sa to prepísanie metódy. Inými slovami, ak podradená trieda poskytuje implementáciu metódy s rovnakým podpisom a návratovým typom ako metóda už definovaná v jednej z jej rodičovských tried, hovorí sa, že táto metóda je prepísaná (nahradená) implementáciou podradenej triedy.. Takže, ak je v triede prepísaná metóda, runtime systém sa bude musieť rozhodnúť, ktorá implementácia metódy sa použije. Tento problém je vyriešený pohľadom na presný typ objektu, ktorý sa používa na jeho vyvolanie. Ak sa na vyvolanie prepísanej metódy použije objekt nadradenej triedy, použije sa implementácia v nadradenej triede. Podobne, ak ide o objekt podradenej triedy, ktorý sa používa, potom sa použije implementácia podradenej triedy. Moderné programovacie jazyky ako Java, Eifell, C++ a Python umožňujú prepísanie metód.
Čo je preťaženie?
Preťaženie metódy je funkcia poskytovaná niektorými programovacími jazykmi na vytvorenie viac ako jednej metódy s rovnakým názvom, ale s rôznymi typmi vstupu a výstupu. V moderných programovacích jazykoch ako Java, C, C++ a VB. NET je táto funkcia dostupná. Metódu môžete preťažiť vytvorením inej metódy s rovnakým názvom, ale s iným podpisom metódy alebo iným typom návratu (alebo oboma). Napríklad, ak máte metódu1(typ1 t1) a metódu1(typ2 t2) v tej istej triede, potom sú preťažené. Potom sa systém bude musieť rozhodnúť, ktorý z nich sa má vykonať, keď je zavolaný. Toto rozlíšenie sa robí tak, že sa pozrieme na typ parametra (parametrov) odovzdaných do metódy. Ak je argument typu1, potom sa volá prvá implementácia, zatiaľ čo ak je typu2, volá sa druhá implementácia.
Aký je rozdiel medzi prepisovaním a preťažovaním?
Aj keď sa prepisovanie metódy a preťaženie metódy používa na poskytnutie metódy s rôznymi implementáciami, medzi týmito dvoma konceptmi/technikami sú kľúčové rozdiely. V prvom rade, predmety prevažovania metódy vždy zostávajú v rôznych triedach, zatiaľ čo predmety preťažovania metódy zostávajú v tej istej triede. To znamená, že prepísanie je možné len v objektovo orientovaných programovacích jazykoch, ktoré umožňujú dedičnosť, zatiaľ čo preťaženie môže byť dostupné aj v neobjektovo orientovanom jazyku. Inými slovami, prepíšete metódu v supertriede, ale preťažíte metódu vo svojej vlastnej triede.
Ďalší rozdiel je v tom, že prepísané metódy majú rovnaký názov metódy, podpis metódy a typ návratu, ale preťažené metódy sa musia líšiť buď podpisom alebo typom návratu (názov by mal byť rovnaký). Na rozlíšenie medzi dvoma prepísanými metódami sa používa presný typ objektu, ktorý sa používa na vyvolanie použitého id metód, zatiaľ čo na rozlíšenie dvoch preťažených metód sa používajú typy parametrov. Ďalším kľúčovým rozdielom je, že preťaženie sa rieši v čase kompilácie, zatiaľ čo prepisovanie sa rieši za behu.