Kaj je preglasitev metode?

Preglasitev metode se uporablja v objektno usmerjenem programiranju znotraj hierarhije dedovanja in se pojavi, ko je metoda, definirana v nadrazredu, ponovno definirana v podrazredu. Običajno metoda podrazreda naredi nekaj drugega kot metoda nadrazreda ali razširi zmožnosti nadrazreda, vendar ni nujno, da je tako. Preglasitev metode se pojavi vsakič, ko je metoda nadrazreda ponovno definirana v podrazredu, ne glede na vsebino ponovno definirane metode. Ponovno definirani podpisi metode morajo biti popolnoma enaki.

Na primer, razred A lahko vsebuje metodo, imenovano »doSomething«, in ta metoda ne potrebuje vhodnih parametrov. Poleg tega sta lahko razreda B in C podrazreda razreda A. Razred B lahko vsebuje metodo, imenovano »doSomething«, ki ne sprejema vhodnih parametrov, razred C pa lahko vsebuje metodo »doSomething«, ki vzame številko kot vhodni parameter. V tem primeru bi samo razred B pokazal preglasitev metode, ker ima njegova metoda »doSomething« enak podpis metode kot njegov nadrazred, razred A. Metoda »doSomething« v razredu C po drugi strani prikazuje preobremenitev metode, ker ustvarja popolnoma nova metoda.

Navidezno dedovanje v C++ je še en primer preglasitve metode. Navidezne metode v nadrazredih se lahko izvajajo ali pa ne, vendar je vsaka njihova definicija podrazreda primer preglasitve metode. Ko je metoda v podrazredu preglasljena, se metoda nadrazreda ne kliče, razen če je izrecno priklicana. Za ta poseben način klicanja preglašene metode se pogosto reče, da “skriva” implementacijo nadrazreda.

Čeprav je preglasitev metod zelo prilagodljiva, vseh metod ni mogoče preglasiti in včasih je ta togost boljša. Tako v Javi kot v C++ je mogoče posebne ključne besede uporabiti v podpisih metod, da se prepreči preglasitev metode v podrazredu. Za to Java uporablja ključno besedo “final”, C++ pa ključno besedo “const”. Preprečevanje preglasitve metode je lahko koristno, če mora biti določena funkcija vedno nespremenjena v celotnem drevesu dedovanja.

Na splošno preprostih metod, ki pridobijo majhne koščke podatkov, ni treba preglasiti. Primeri, ki imajo običajno največjo korist od preglasitve, so, ko želi podrazred dodati funkcionalnost metodi nadrazreda, ne da bi za to ustvaril popolnoma novo metodo. Ta tehnika bi lahko koristila tudi nenavadnim primerom, v katerih je treba metodo popolnoma predelati za eno določeno vrsto predmeta. Kadar koli se metoda preglasi, je pomembno, da programer ustrezno komentira metode nadrazreda in podrazreda. V idealnem primeru bi morali ti komentarji pojasniti, kaj počne vsaka različica metode ter kako in zakaj se razlikujejo.