Ce este suprascrierea metodei?

Suprascrierea metodei este utilizată în programarea orientată pe obiecte în cadrul unei ierarhii de moștenire și apare atunci când o metodă definită într-o superclasă este redefinită într-o subclasă. De obicei, metoda subclasei face ceva diferit de metoda superclasei sau extinde o capacitate a superclasei, dar acest lucru nu trebuie să fie cazul. Suprascrierea metodei are loc ori de câte ori o metodă superclasă este redefinită într-o subclasă, indiferent de conținutul metodei redefinite. Semnăturile metodei redefinite trebuie să fie exact aceleași.

De exemplu, o clasă A poate conține o metodă numită „doSomething”, iar această metodă nu acceptă parametrii de intrare. În plus, clasele B și C ar putea fi subclase ale clasei A. Clasa B poate conține o metodă numită „doSomething”, care nu acceptă parametri de intrare, iar clasa C poate conține o metodă „doSomething” care ia un număr ca parametru de intrare. În acest exemplu, numai clasa B ar demonstra suprascrierea metodei, deoarece metoda sa „doSomething” are aceeași semnătură de metodă ca superclasa sa, clasa A. Metoda „doSomething” din clasa C, pe de altă parte, demonstrează supraîncărcarea metodei, deoarece creează o metodă complet nouă.

Moștenirea virtuală în C++ este un alt exemplu de suprascriere a metodei. Metodele virtuale din superclase pot fi sau nu implementate, dar orice definiție de subclasă a acestora este o instanță de suprascriere a metodei. Când o metodă este suprascrisă într-o subclasă, metoda superclasei nu este apelată decât dacă este invocată în mod explicit. Acest mod specific de a apela o metodă suprascrisă se spune adesea că „ascunde” implementarea superclasei.

Deși anularea metodei este foarte flexibilă, nu toate metodele pot fi anulate și există momente când această rigiditate ar putea fi de preferat. Atât în ​​Java, cât și în C++, anumite cuvinte cheie pot fi aplicate în semnăturile metodei pentru a preveni suprascrierea unei metode într-o subclasă. Pentru a face acest lucru, Java folosește cuvântul cheie „final”, iar C++ folosește cuvântul cheie „const”. Prevenirea suprascrierii metodei poate fi benefică dacă o anumită funcție ar trebui să rămână întotdeauna neschimbată în cadrul unui arbore de moștenire.

În general, metodele simple care obțin bucăți mici de date nu ar trebui să fie înlocuite. Cazurile care tind să beneficieze cel mai mult de pe urma suprascrierii sunt atunci când o subclasă urmărește să adauge funcționalitate unei metode de superclasă fără a crea o metodă complet nouă pentru a face acest lucru. Cazurile neobișnuite în care o metodă trebuie refăcută complet pentru un anumit tip de obiect ar putea beneficia și de această tehnică. Ori de câte ori o metodă este suprascrisă, este important ca programatorul să comenteze în mod adecvat atât metodele superclasei, cât și cele ale subclaselor. În mod ideal, aceste comentarii ar trebui să clarifice ce face fiecare variantă a metodei, precum și cum și de ce diferă.