Mis on meetodi alistamine?

Meetodi alistamist kasutatakse pärimishierarhias objektorienteeritud programmeerimisel ja see toimub siis, kui ülemklassis määratletud meetod alamklassis uuesti määratletakse. Tavaliselt teeb alamklassi meetod midagi muud kui ülemklassi meetod või laiendab ülemklassi võimalusi, kuid see ei pea nii olema. Meetodi alistamine toimub alati, kui ülemklassi meetod alamklassis uuesti määratletakse, olenemata uuesti määratletud meetodi sisust. Uuesti määratletud meetodi allkirjad peavad olema täpselt samad.

Näiteks võib klass A sisaldada meetodit nimega “doSomething” ja see meetod ei võta sisendparameetreid. Lisaks võivad klassid B ja C olla klassi A alamklassid. Klass B võib sisaldada meetodit nimega “doSomething”, mis ei võta sisendparameetreid, ja klass C võib sisaldada meetodit “doSomething”, mis võtab sisendparameetrina arvu. Selles näites demonstreerib ainult klass B meetodi alistamist, kuna selle meetodil “doSomething” on sama meetodi signatuur kui selle superklassil A. Meetod “doSomething” klassis C seevastu näitab meetodi ülekoormamist, kuna see loob täiesti uus meetod.

Virtuaalne pärand C++ keeles on veel üks näide meetodi alistamise kohta. Ülemklasside virtuaalseid meetodeid võidakse rakendada, kuid ei pruugita, kuid nende mis tahes alamklassi määratlus on meetodi alistamise näide. Kui meetod alamklassis tühistatakse, ei kutsuta ülemklassi meetodit välja, välja arvatud juhul, kui see on otseselt välja kutsutud. Sageli öeldakse, et see konkreetne viis tühistatud meetodi kutsumiseks “peidab” superklassi teostuse.

Kuigi meetodi alistamine on väga paindlik, ei saa kõiki meetodeid alistada ja mõnikord võib see jäikus olla eelistatavam. Nii Java kui ka C++ puhul saab meetodi signatuurides rakendada kindlaid märksõnu, et vältida meetodi ülekirjutamist alamklassis. Selleks kasutab Java märksõna “final” ja C++ märksõna “const”. Meetodi alistamise vältimine võib olla kasulik, kui konkreetne funktsioon peaks olema kogu pärandipuus alati muutumatu.

Üldiselt ei tohiks lihtsaid meetodeid, mis hangivad väikseid andmeid, vaja üle kirjutada. Juhtudel, mis tavaliselt saavad alistamisest kõige rohkem kasu, on siis, kui alamklassi eesmärk on lisada ülemklassi meetodile funktsionaalsust ilma selleks täiesti uut meetodit loomata. Sellest tehnikast võivad kasu olla ka ebatavalised juhtumid, mil meetod tuleb ühte kindlat tüüpi objektide jaoks täielikult ümber teha. Kui meetod on tühistatud, on programmeerija jaoks oluline nii ülemklassi kui ka alamklassi meetodeid piisavalt kommenteerida. Ideaalis peaksid need kommentaarid selgitama, mida iga meetodi variant teeb, samuti kuidas ja miks need erinevad.