Přepsání vs přetížení
Metoda Přepsání a Přetížení metody jsou dva koncepty / techniky / funkce nalezené v některých programovacích jazycích. Oba koncepty umožňují programátorovi poskytnout různé implementace pro metody se stejným názvem. Přepsání metody umožňuje programátorovi poskytnout alternativní implementaci v rámci podtřídy k metodě již definované v její supertřídě. Přetížení metody umožňuje programátorovi poskytnout různé implementace do více metod se stejným názvem (v rámci stejné třídy).
Co je přepsání?
Jak již bylo zmíněno výše, třída může rozšířit super třídu nebo nadřazenou třídu v objektově orientovaných programovacích jazycích. Podřízená třída může mít své vlastní metody nebo může volitelně mít své vlastní implementace do metod již definovaných v její nadřazené třídě (nebo v jedné z jejích hlavních tříd). Když k tomu dojde, nazývá se to přepsání metody. Jinými slovy, pokud podřízená třída poskytuje implementaci metodě se stejným typem podpisu a návratu jako metoda již definovaná v jedné z jejích nadřazených tříd, říká se, že tato metoda je přepsána (nahrazena) implementací podřízené třídy. Pokud tedy ve třídě existuje přepsaná metoda, běhový systém bude muset rozhodnout, která implementace metody se použije. Tento problém je vyřešen pohledem na přesný typ objektu, který se používá k jeho vyvolání. Pokud se k vyvolání přepsané metody používá objekt nadřazené třídy, použije se implementace v nadřazené třídě. Podobně, pokud se používá objekt podřízené třídy, použije se implementace podřízené třídy. Moderní programovací jazyky jako Java, Eifell, C ++ a Python umožňují přepsání metody.
Co je přetížení?
Přetížení metody je funkce poskytovaná některými programovacími jazyky k vytvoření více než jedné metody se stejným názvem, ale s různými typy vstupu a výstupu. V moderních programovacích jazycích, jako je Java, C #, C ++ a VB. NET, je tato funkce k dispozici. Metodu můžete přetížit vytvořením jiné metody se stejným názvem, ale s jiným podpisem metody nebo jiným návratovým typem (nebo oběma). Například pokud máte method1 (type1 t1) a method1 (type2 t2) uvnitř stejné třídy, pak jsou přetíženi. Poté se systém bude muset rozhodnout, který z nich bude spuštěn, když bude vyvolán. Tato diferenciace se provádí při pohledu na typ parametru předaného do metody. Pokud je argument typu 1, je volána první implementace, zatímco pokud je typu 2, je volána druhá implementace.
Jaký je rozdíl mezi přepsáním a přetížením?
I když se pro zajištění metody s různými implementacemi používá přepsání metody a přetížení metody, mezi těmito dvěma koncepty / technikami existují klíčové rozdíly. Za prvé, subjekty přepsání metody vždy zůstávají v různých třídách, zatímco subjekty přetížení metody zůstávají ve stejné třídě. To znamená, že přepsání je možné pouze v objektově orientovaných programovacích jazycích, které umožňují dědičnost, zatímco přetížení může být k dispozici také v neobjektově orientovaném jazyce. Jinými slovy přepíšete metodu v super třídě, ale přetížíte metodu ve své vlastní třídě.
Dalším rozdílem je, že přepsané metody mají stejný název metody, podpis metody a návratový typ, ale přetížené metody se musí lišit buď v podpisu, nebo v návratovém typu (název by měl být stejný). Aby bylo možné rozlišovat mezi dvěma přepsanými metodami, používá se přesný typ objektu, který se používá k vyvolání použitého id metody, zatímco k rozlišení mezi dvěma přetíženými metodami se používají typy parametrů. Dalším klíčovým rozdílem je, že přetížení je vyřešeno v době kompilace, zatímco přepsání je vyřešeno za běhu.