Wat is methode doorslaggevend?
Methode overschrijven wordt gebruikt in objectgeoriënteerd programmeren binnen een overervingshiërarchie en het treedt op wanneer een in een superklasse gedefinieerde methode opnieuw wordt gedefinieerd in een subklasse. Gewoonlijk doet de subklasse-methode iets anders dan de superklasse-methode of breidt het een mogelijkheid van de superklasse uit, maar dit hoeft niet het geval te zijn. Het overschrijven van de methode vindt plaats wanneer een superklasse methode opnieuw wordt gedefinieerd in een subklasse, ongeacht de inhoud van de opnieuw gedefinieerde methode. De opnieuw gedefinieerde methode handtekeningen moeten exact hetzelfde zijn.
Een klasse A kan bijvoorbeeld een methode "doSomething" bevatten en deze methode heeft geen invoerparameters. Bovendien kunnen klassen B en C subklassen van klasse A zijn. Klasse B kan een methode genaamd "doSomething" bevatten, waarvoor geen invoerparameters nodig zijn, en klasse C kan een methode "doSomething" bevatten die een getal als invoerparameter gebruikt. In dit voorbeeld zou alleen klasse B demonstratie van de methode demonstreren, omdat de "doSomething" -methode dezelfde methodehandtekening heeft als zijn superklasse, klasse A. De "doSomething" -methode in klasse C demonstreert anderzijds methode-overbelasting omdat het creëert een volledig nieuwe methode.
Virtuele overerving in C ++ is een ander voorbeeld van het negeren van methoden. Virtuele methoden in superklassen kunnen al dan niet worden geïmplementeerd, maar elke subklasse-definitie ervan is een methode waarbij de methode wordt opgeheven. Wanneer een methode wordt overschreven in een subklasse, wordt de methode van de superklasse niet aangeroepen tenzij deze expliciet wordt aangeroepen. Van deze specifieke manier om een onderdrukte methode aan te roepen, wordt vaak gezegd dat de implementatie van de superklasse wordt "verborgen".
Hoewel het negeren van methoden erg flexibel is, kunnen niet alle methoden worden genegeerd en er zijn momenten waarop deze starheid de voorkeur verdient. In zowel Java als C ++ kunnen specifieke trefwoorden in methodehandtekeningen worden toegepast om te voorkomen dat een methode in een subklasse wordt genegeerd. Java gebruikt hiervoor het trefwoord "final" en C ++ gebruikt het trefwoord "const". Het voorkomen van het negeren van methoden kan gunstig zijn als een bepaalde functie altijd ongewijzigd moet blijven in een erfenisboom.
Over het algemeen hoeven eenvoudige methoden die kleine stukjes gegevens verzamelen niet te worden genegeerd. Gevallen die de meeste baat hebben bij het negeren, zijn wanneer een subklasse als doel heeft functionaliteit toe te voegen aan een superklasse-methode zonder daarvoor een geheel nieuwe methode te creëren. Ongewone gevallen waarin een methode volledig opnieuw moet worden uitgevoerd voor een specifiek type object, kunnen ook baat hebben bij deze techniek. Wanneer een methode wordt genegeerd, is het belangrijk voor de programmeur om zowel de superklasse- als de subklasse-methode adequaat te becommentariëren. Idealiter zouden deze opmerkingen moeten verduidelijken wat elke variant van de methode doet, evenals hoe en waarom ze verschillen.