Rozdíl mezi přepsáním a přetížením

Rozdíl mezi přepsáním a přetížením
Rozdíl mezi přepsáním a přetížením

Video: Rozdíl mezi přepsáním a přetížením

Video: Rozdíl mezi přepsáním a přetížením
Video: Rozdíl mezi "rozbaleno, "zánovní" a "použité" na Alza? 2024, Prosinec
Anonim

Přepisování vs přetěžování

Metoda Overriding a Method Overloading jsou dva koncepty/techniky/funkce nalezené v některých programovacích jazycích. Oba koncepty umožňují programátorovi poskytovat 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í nadtřídě. Přetížení metod umožňuje programátorovi poskytovat různé implementace více metodám se stejným názvem (v rámci stejné třídy).

Co je přednostní?

Jak bylo uvedeno výše, třída může rozšířit supertří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 mít volitelně své vlastní implementace metod již definovaných v její nadřazené třídě (nebo v jedné z jejích hlavních nadřazených tříd). Takže když k tomu druhému dojde, nazývá se to přepsání metody. Jinými slovy, pokud podřízená třída poskytuje implementaci metodě se stejným podpisem a návratovým typem 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, bude muset runtime systém 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žije objekt nadřazené třídy, použije se implementace v nadřazené třídě. Podobně, pokud se jedná o objekt podřízené třídy, která se používá, použije se implementace podřízené třídy. Moderní programovací jazyky jako Java, Eifell, C++ a Python umožňují přepisování metod.

Co je přetížení?

Přetížení metody je funkce poskytovaná některými programovacími jazyky pro vytvoření více než jedné metody se stejným názvem, ale s různými typy vstupů a výstupů. V moderních programovacích jazycích jako Java, C, C++ a VB. NET je tato funkce dostupná. 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 obojím). Například, pokud máte metodu1(typ1 t1) a metodu1(typ2 t2) uvnitř stejné třídy, jsou přetížené. Poté se systém bude muset rozhodnout, který z nich má být proveden, když je volán. Toto rozlišení se provádí pohledem na typ parametru (parametrů) předávaných do metody. Pokud je argument typu1, pak se zavolá první implementace, zatímco pokud je typu2, zavolá se druhá implementace.

Jaký je rozdíl mezi přepsáním a přetížením?

Přestože se přepisování metod a přetěžování metod používají k poskytování metody s různými implementacemi, mezi těmito dvěma koncepty/technikami jsou klíčové rozdíly. Za prvé, předměty přetěžování metod zůstávají vždy v různých třídách, zatímco předměty přetěžování metod zůstávají ve stejné třídě. To znamená, že přepisová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 dostupné i v neobjektově orientovaném jazyce. Jinými slovy, přepíšete metodu v supertřídě, ale přetížíte metodu ve vaší vlastní třídě.

Další rozdíl je v tom, že přepsané metody mají stejný název metody, signaturu metody a návratový typ, ale přetížené metody se musí lišit buď signaturou nebo návratovým typem (název by měl být stejný). Aby bylo možné rozlišit mezi dvěma přepsanými metodami, přesný typ objektu, který se používá k vyvolání použitých metod, zatímco k rozlišení dvou přetížených metod 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řepisování je vyřešeno za běhu.

Doporučuje: