Hva er metodeoverskridelse?
Overstyring av metode brukes i objektorientert programmering i et arvelighetshierarki, og det oppstår når en metode definert i en superklasse omdefineres i en underklasse. Vanligvis gjør underklassemetoden noe annet enn superklassemetoden, eller utvides med en evne til superklassen, men dette trenger ikke være tilfelle. Overvinning av metoden skjer når en superklassemetode omdefineres i en underklasse, uavhengig av innholdet i den omdefinerte metoden. De omdefinerte metodesignaturene må være nøyaktig de samme.
For eksempel kan en klasse A inneholde en metode som heter "doSomething", og denne metoden tar ingen inndataparametere. I tillegg kan klasse B og C være underklasser av klasse A. Klasse B kan inneholde en metode som heter "doSomething", som ikke tar noen inngangsparametere, og klasse C kan inneholde en metode "doSomething" som tar et tall som en inngangsparameter. I dette eksemplet vil bare klasse B demonstrere metodeoverskridelse, fordi dens "doSomething" -metode har samme metodesignatur som superklassen, klasse A. "doSomething" -metoden i klasse C, derimot, demonstrerer metodebelastning fordi den skaper en helt ny metode.
Virtuell arv i C ++ er et annet eksempel på metodeoverskridelse. Virtuelle metoder i superklasser kan eller ikke bli implementert, men enhver underklasse-definisjon av dem er et eksempel på overstyring av metoden. Når en metode overstyres i en underklasse, blir metoden til superklassen ikke kalt med mindre den påberopes eksplisitt. Denne spesifikke måten å kalle en overstyrd metode sies ofte å "skjule" superklasseimplementeringen.
Selv om metodeoverskridelse er veldig fleksibel, kan ikke alle metoder overstyres, og det er tider hvor denne stivheten kan være å foretrekke. I både Java og C ++ kan spesifikke nøkkelord brukes i metodesignaturer for å forhindre at en metode overstyres i en underklasse. For å gjøre dette bruker Java det "endelige" nøkkelordet, og C ++ bruker "const" -nøkkelordet. Å forhindre overstyring av metode kan være fordelaktig hvis en bestemt funksjon alltid skal være uendret i et arv.
Generelt bør enkle metoder som skaffer små data ikke være nødvendig å overstyre. Tilfeller som har en tendens til å ha mest utbytte av å overstyre er når en underklasse tar sikte på å legge til funksjonalitet til en superklassemetode uten å lage en helt ny metode for å gjøre det. Uvanlige tilfeller der en metode må fullstendig gjøres om for en bestemt type objekt, kan også dra nytte av denne teknikken. Hver gang en metode overstyres, er det viktig for programmereren å kommentere tilstrekkelig både superklassen og underklasse-metodene. Ideelt sett bør disse kommentarene tydeliggjøre hva hver variant av metoden gjør, samt hvordan og hvorfor de er forskjellige.