Co je převažující metoda?
Přepisování metod se používá v objektově orientovaném programování v hierarchii dědičnosti a nastává, když je metoda definovaná v nadřazené třídě znovu definována v podtřídě. Metoda podtřídy obvykle dělá něco jiného než metoda podtřídy nebo rozšiřuje možnosti nadřazené třídy, ale nemusí tomu tak být. K přepsání metody dochází vždy, když je metoda superclass nově definována v podtřídě, bez ohledu na obsah redefinované metody. Předefinované podpisy metody musí být přesně stejné.
Například třída A může obsahovat metodu nazvanou „doSomething“ a tato metoda nepřijímá žádné vstupní parametry. Kromě toho třídy B a C mohou být podtřídami třídy A. Třída B může obsahovat metodu nazvanou „doSomething“, která nebere žádné vstupní parametry, a třída C může obsahovat metodu „doSomething“, která bere číslo jako vstupní parametr. V tomto příkladu by pouze třída B prokázala potlačení metody, protože její metoda „doSomething“ má stejný podpis metody jako její nadřazená třída, třída A. Metoda „doSomething“ ve třídě C naopak ukazuje přetížení metody, protože vytváří zcela nová metoda.
Virtuální dědičnost v C ++ je dalším příkladem potlačení metody. Virtuální metody v nadřazených třídách mohou nebo nemusí být implementovány, ale jakákoli jejich definice v podtřídě je instancí potlačení metody. Pokud je metoda přepsána v podtřídě, metoda nadřazené třídy není volána, pokud není vyvolána explicitně. O tomto konkrétním způsobu volání přepsané metody se často říká, že „skrývá“ implementaci nadřazené třídy.
Přestože je přepisování metody velmi flexibilní, ne všechny metody lze přepsat a existují situace, kdy by tato rigidita mohla být výhodnější. V jazyce Java i C ++ lze v podpisech metody použít specifická klíčová slova, aby se zabránilo přepsání metody v podtřídě. K tomu používá Java klíčové slovo „final“ a C ++ používá klíčové slovo „const“. Prevence předřazení metody může být prospěšná, pokud by určitá funkce měla být v celém dědickém stromu vždy nezměněna.
Obecně by nemělo být nutné přepisovat jednoduché metody, které získávají malé kousky dat. Případy, které mají tendenci těžit z převažujících výhod, jsou případy, kdy cílem podtřídy je přidat k metodě nadtřídy funkčnost bez vytvoření zcela nové metody. Z této techniky mohou také těžit neobvyklé případy, kdy je třeba metodu 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 metodu supertřídy i podtřídy. V ideálním případě by tyto poznámky měly objasnit, co každá varianta metody dělá, a jak a proč se liší.