Přetížení zahrnuje definování více funkcí se stejným názvem, ale různými parametry v rámci stejné třídy. K přepsání dochází, když podtřída poskytuje specifickou implementaci pro metodu, která je již definována v její nadtřídě, přičemž zachovává signaturu metody. Oba podporují polymorfismus v objektově orientovaném programování.
Key Takeaways
- K přetížení dochází, když ve třídě existuje více metod se stejným názvem, ale různými parametry. Současně k přepsání dochází, když podtřída poskytuje novou implementaci pro metodu definovanou v její nadtřídě.
- Přetížení umožňuje měnit funkčnost metody na základě vstupních parametrů, zatímco přepisování umožňuje podtřídě upravit nebo rozšířit chování metody nadtřídy.
- Přetížení je vyřešeno v době kompilace, zatímco přepsání je určeno za běhu.
Přetížení vs přepisování
Přetížení je funkce objektově orientovaného programování, která umožňuje existenci mnoha metod se stejným názvem, ale odlišnými parametry. Přepsání je proces dodání nové implementace pro metodu v podtřídě, která již v nadtřídě existuje.
Přetížení znamená psát stejné funkce mnohokrát s různými parametry. To však v programovacím jazyce C neumíme. V opačném případě, Jáva podporuje koncept přetížení.
Programátoři mohou při kódování provést tři typy přetížení Jáva. Je to užitečný koncept pro zjednodušení programu.
V počítačovém jazyce se v konceptu dědičnosti používá převažující metoda. Kdykoli je funkce vytvořena v nadtřídě a poté použita v podtřídě zděděním metod hlavní třídy.
Umožňuje podtřídě přepsat funkci nadřazené třídy, protože podtřída má při běhu programu prioritu.
Srovnávací tabulka
vlastnost | Přetížení | Převažující |
---|---|---|
Definice | Více metod se stejným názvem, ale různé parametry v rámci stejná třída | Předefinování existující metody v a podtřída s stejný název a parametry jako metoda rodičovské třídy |
Účel | Poskytujte více funkcí založených na různých typech vstupních dat nebo kombinacích | Specializujte chování metody zděděné ze základní třídy |
Rozsah | Stejná třída | Třídy pro rodiče a děti |
Mechanismus | Polymorfismus v době kompilace založený na signaturách parametrů | Runtime polymorfismus založený na dynamickém typu objektu |
Dědictví | Nevyžaduje se | Vyžaduje dědictví |
Návratový typ | Mohou být stejné nebo různé | Musí být stejný nebo kovariantní (návratový typ podtřídy může být širší typ než nadřazený typ) |
Statické metody | Může být přetížen | Nelze přepsat |
Soukromé metody | Může být přetížen | Nelze přepsat |
Příklad | add(int a, int b) , add(double a, double b) ve stejné třídě pro zpracování různých typů čísel | draw() metoda ve třídě Rectangle přepsána ve třídě Čtverec, aby se místo obecného obdélníku nakreslil čtverec |
Co je přetížení?
Přetížení je koncept v programování, který umožňuje třídě mít více metod nebo konstruktorů se stejným názvem, ale různými parametry. Umožňuje, aby jeden název funkce reprezentoval různé funkce na základě typu nebo počtu argumentů.
Přetížení metody
Při přetěžování metod v rámci třídy sdílí více metod stejný název, ale mají různé seznamy parametrů. Kompilátor je rozlišuje na základě počtu, typů nebo pořadí parametrů, což umožňuje flexibilitu při volání funkcí.
Přetížení konstruktéra
Přetížení konstruktoru aplikuje stejnou myšlenku na konstruktory tříd. Třída může mít více konstruktorů s různými seznamy parametrů, které poskytují různé způsoby inicializace objektů.
Příklad
class Calculator { int add(int a, int b) { return a + b; } double add(double a, double b) { return a + b; } }
V tomto příkladu Java je Calculator
třída demonstruje přetížení metody dvěma add
metody, jedna pro celá čísla a druhá pro dvojky.
Výhody
- Čitelnost: Přetížení zlepšuje čitelnost kódu pomocí jediného intuitivního názvu metody pro související operace.
- Flexibilita: Nabízí flexibilitu tím, že umožňuje různé kombinace parametrů, díky čemuž je kód lépe přizpůsobitelný různým scénářům.
- Znovupoužitelnost kódu: Přetížení podporuje opětovnou použitelnost kódu, protože vývojáři mohou používat stejný název metody pro podobné operace s různými datovými typy.
Co je Overriding?
Přepsání je základní koncept v objektově orientovaném programování, ke kterému dochází, když podtřída poskytuje specifickou implementaci pro metodu, která je již definována v její nadtřídě. Umožňuje podtřídě poskytovat specializovanou verzi metody, která mění nebo rozšiřuje chování definované v nadtřídě.
Klíčové koncepty
Dědictví
Přepisování je úzce spjato s konceptem dědičnosti, kde podtřída dědí vlastnosti a chování z nadtřídy. Když podtřída přepíše metodu, poskytuje svou vlastní implementaci, přičemž si zachovává signaturu metody z nadtřídy.
Podpis metody
Přepsání vyžaduje udržování stejného podpisu metody v podtřídě jako v nadtřídě. To zahrnuje název metody, návratový typ a typy parametrů. O přepsané metodě v podtřídě se říká, že „přepíše“ metodu v nadtřídě.
Příklad
class Shape { void draw() { System.out.println("Drawing a shape"); } } class Circle extends Shape { @Override void draw() { System.out.println("Drawing a circle"); } }
V tomto příkladu Java je Circle
třída přepíše draw
metoda ze své nadtřídy Shape
poskytnout konkrétní implementaci pro kreslení kruhu.
Použití @Override Anotace
Projekt @Override
anotace se používá v programovacích jazycích, jako je Java, k explicitnímu označení, že metoda v podtřídě má přepsat metodu v nadtřídě. Tato anotace pomáhá zachytit chyby v době kompilace, pokud podpis metody neodpovídá žádné metodě v nadtřídě.
class Circle extends Shape { @Override void draw() { System.out.println("Drawing a circle"); } }
Výhody
- Polymorfismus: Přepsání podporuje polymorfismus, což umožňuje, aby se s objekty podtřídy zacházelo jako s objekty nadtřídy, což poskytuje obecnější rozhraní.
- Možnosti přizpůsobení: Umožňuje přizpůsobení chování pro konkrétní podtřídy, což umožňuje každé podtřídě přizpůsobit implementaci zděděných metod.
- Údržba kódu: Přepsání podporuje údržbu kódu tím, že umožňuje úpravy chování v centralizovaném umístění (nadtřída), které se automaticky šíří do všech podtříd.
Hlavní rozdíly mezi přetížením a přepsáním
- Definice:
- Přetížení: Zahrnuje definování více metod nebo konstruktorů se stejným názvem, ale různými parametry v rámci stejné třídy.
- Přepsání: Vyskytuje se, když podtřída poskytuje specifickou implementaci pro metodu již definovanou ve své nadtřídě, přičemž zachovává signaturu metody.
- pronájem:
- Přetížení: Metody nebo konstruktory se stejným názvem jsou definovány ve stejné třídě.
- Přepsání: Odehrává se v podtřídě, která zdědí metodu ze své nadtřídy.
- Podpis metody:
- Přetížení: Rozlišuje se na základě počtu, typů nebo pořadí parametrů, přičemž název metody zůstává stejný.
- Přepsání: Vyžaduje udržování stejného podpisu metody (název, návratový typ a parametry) v nadtřídě i podtřídě.
- Anotace:
- Přetížení: K označení přetížení se nepoužívá žádná konkrétní anotace.
- Přepsání: Často se označuje pomocí anotací jako
@Override
(např. v Javě) k explicitní deklaraci záměru přepsat metodu z nadtřídy.
- Vztah:
- Přetížení: Obvykle se používá v rámci jedné třídy k poskytnutí více způsobů použití metody.
- Přepsání: Zahrnuje vztah mezi nadtřídou a její podtřídou, což umožňuje podtřídě poskytovat svou implementaci pro zděděné metody.
- Účel:
- Přetížení: Zvyšuje čitelnost a flexibilitu kódu tím, že poskytuje více verzí metody pro různé typy parametrů nebo kombinace.
- Přepsání: Usnadňuje polymorfismus, přizpůsobení a centralizovanou údržbu kódu tím, že umožňuje podtřídám poskytovat specifické implementace pro zděděné metody.
- https://link.springer.com/chapter/10.1007/978-3-642-14107-2_25
- https://dl.acm.org/doi/abs/10.1145/1141277.1141608
Poslední aktualizace: 11. února 2024
Sandeep Bhandari získal bakalářský titul v oboru počítačů na Thapar University (2006). Má 20 let zkušeností v oblasti technologií. Má velký zájem o různé technické obory, včetně databázových systémů, počítačových sítí a programování. Více si o něm můžete přečíst na jeho bio stránka.
Přetěžování a přepisování jsou základními pojmy v programovacích jazycích a tento článek odvádí skvělou práci tím, že představuje jasný a komplexní přehled obou. Obzvláště užitečné jsou srovnání konceptů.
Pozoruhodný článek, který vysvětluje složité rozdíly mezi přetěžováním a přepisováním v objektově orientovaném programování. Článek dokáže efektivně pokrýt teoretické i praktické aspekty.
Příspěvek jasně vysvětluje rozdíly mezi přetížením a přepsáním, což usnadňuje pochopení těchto dvou pojmů. To je velmi přínosné pro každého, kdo studuje programovací jazyky a objektově orientované programování.
Ačkoli jsou vysvětlení přetížení a přepisování dobrá, myslím si, že širší diskuse o praktických aplikacích těchto pojmů v reálných programovacích scénářích by článek učinila komplexnějším.
Toto je velmi zajímavý a užitečný článek, který poskytuje celkové porozumění přetěžování a přepisování funkcí v programovacích jazycích. Obzvláště se mi líbila srovnávací tabulka a podrobné vysvětlení klíčových pojmů.
Příspěvek odvádí výjimečnou práci ve vysvětlení základních rozdílů mezi přetěžováním a přepisováním a jejich aplikací v objektově orientovaném programování. Komplexní a přitom stručné.