Co je převažující metoda?
Převažování metody
Metoda se používá v objektově orientovaném programování v hierarchii dědičnosti a vyskytuje se, když je metoda definovaná v nadřazené třídě předefinována v podtřídě. Metoda podtřídy obvykle dělá něco jiného než metoda superclass nebo se rozšiřuje o schopnost superclass, ale nemusí tomu tak být. K převahu metody dochází vždy, když je metoda superclasy předefinována v podtřídě, bez ohledu na obsah předefinované metody. Předefinované podpisy metody musí být přesně stejné. Kromě toho mohou být třídy B a C podtřídy třídy A. Třída B mohou obsahovat metodu nazvanou „dosomething“, která nebere žádné vstupní parametry, a třída C může obsahovat metodu „doshimthing“, která vezme číslo jako vstupní parametr. V tomto příkladu by pouze třída B prokázala převažující metodu, protože její metoda „dosomething“ má stejnou měPodpis THOD jako jeho superclass, třída A. Metoda „Dosomething“ ve třídě C, na druhé straně, ukazuje přetížení metody, protože vytváří zcela novou metodu.
Virtuální dědičnost v C ++ je dalším příkladem převažující metody. Virtuální metody v superclassech mohou nebo nemusí být implementovány, ale jakákoli jejich definice podtřídy je instancí převažující metody. Když je metoda přepsána v podtřídě, metoda superclasy není volána, pokud není vyvolána explicitně. Tento specifický způsob volání přepsané metody se často říká, že „skrývá“ implementaci super třídy.
Ačkoli převažující metoda je velmi flexibilní, ne všechny metody mohou být přepsány a jsou časy, kdy by tato tuhost mohla být výhodnější. V JAVA i C ++ lze v podpisech metod použít specifická klíčová slova, aby se zabránilo přepsání metody v podtřídě. K tomu, Javapoužívá klíčové slovo „konečné“ a C ++ používá klíčové slovo „const“. Prevence převahy metody může být prospěšná, pokud by se konkrétní funkce měla vždy nezměnit v celém stromu dědictví.
Obecně by neměly být přepsány jednoduché metody, které získávají malé kousky dat. Případy, které mají tendenci nejvíce těžit z přepsání, jsou, když podtřída si klade za cíl přidat funkčnost k metodě superclass, aniž by to vytvořilo zcela novou metodu. Z této techniky by také mohly mít prospěch také neobvyklé případy, kdy metoda je třeba zcela přepracovat pro jeden konkrétní typ objektu. Kdykoli je metoda přepsána, je důležité, aby programátor adekvátně komentoval metody superclass i podtřídy. V ideálním případě by tyto komentáře měly objasnit, co každá varianta metody dělá, a jak a proč se liší.