Hvad er metodeoverskridelse?
Metodeoverskridelse bruges i objektorienteret programmering inden for et arvehierarki, og det forekommer, når en metode defineret i en superklasse omdefineres i en underklasse. Normalt gør underklasse-metoden noget andet end superklassemetoden eller udvides med superklassen, men det behøver ikke at være tilfældet. Fremgangsmådeoverskridelse forekommer, når en superklassemetode omdefineres i en underklasse, uanset indholdet af den omdefinerede metode. De omdefinerede metodesignaturer skal være nøjagtig de samme.
For eksempel kan en klasse A indeholde en metode kaldet "doSomething", og denne metode tager ingen inputparametre. Derudover kan klasse B og C muligvis være underklasser af klasse A. Klasse B kan muligvis indeholde en metode kaldet "doSomething", som ikke tager nogen inputparametre, og klasse C kan indeholde en metode "doSomething", der tager et tal som en inputparameter. I dette eksempel vil kun klasse B demonstrere metodeoverskridelse, fordi dens "doSomething" -metode har den samme metodesignatur som dens superklasse, klasse A. Metoden "doSomething" i klasse C demonstrerer på den anden side metodeoverbelastning, fordi den skaber en helt ny metode.
Virtuel arv i C ++ er et andet eksempel på metodeoverskridelse. Virtuelle metoder i superklasser kan eller måske ikke implementeres, men enhver underklasse-definition af dem er et eksempel på metodeoverskridelse. Når en metode tilsidesættes i en underklasse, kaldes superklasse-metoden ikke, medmindre den kaldes eksplicit. Denne specifikke måde at kalde en overstyret metode siges ofte for at ”skjule” superklasseimplementeringen.
Selvom metodeoverskridelse er meget fleksibel, kan ikke alle metoder tilsidesættes, og der er tidspunkter, hvor denne stivhed kan være at foretrække. I både Java og C ++ kan specifikke nøgleord anvendes i metodesignaturer for at forhindre, at en metode overskrides i en underklasse. For at gøre dette bruger Java det "endelige" nøgleord, og C ++ bruger "const" nøgleordet. Forebyggelse af metodeoverskridelse kan være fordelagtigt, hvis en bestemt funktion altid skal være uændret i hele et arvetræ.
Generelt skal enkle metoder, der får små stykker data, ikke behøves tilsidesat. Tilfælde, der har en tendens mest til at drage fordel af, er, at en underklasse sigter mod at tilføje funktionalitet til en superklassemetode uden at oprette en helt ny metode til at gøre det. Usædvanlige tilfælde, hvor en metode skal omlægges fuldstændigt for en bestemt type objekt, kan også drage fordel af denne teknik. Hver gang en metode tilsidesættes, er det vigtigt for programmereren at kommentere både superklassen og underklasse-metoderne tilstrækkeligt. Ideelt set bør disse kommentarer tydeliggøre, hvad hver variant af metoden gør, samt hvordan og hvorfor de adskiller sig.