Overschrijven versus overbelasting
De methode Overriding en methode Overloading zijn twee concepten/technieken/functies die in sommige programmeertalen voorkomen. Met beide concepten kan de programmeur verschillende implementaties bieden voor methoden met dezelfde naam. Met het overschrijven van methoden kan de programmeur een alternatieve implementatie bieden binnen een subklasse voor een methode die al is gedefinieerd in zijn superklasse. Door overbelasting van methoden kan de programmeur verschillende implementaties bieden voor meerdere methoden met dezelfde naam (binnen dezelfde klasse).
Wat is belangrijker?
Zoals hierboven vermeld, kan een klasse een superklasse of een bovenliggende klasse uitbreiden, in objectgeoriënteerde programmeertalen. Een onderliggende klasse kan zijn eigen methoden hebben of kan optioneel zijn eigen implementaties hebben voor methoden die al zijn gedefinieerd in zijn bovenliggende klasse (of een van zijn grootouderklassen). Dus wanneer het laatste gebeurt, wordt dit methode-overriding genoemd. Met andere woorden, als de onderliggende klasse een implementatie biedt voor een methode met dezelfde handtekening en hetzelfde retourtype als een methode die al is gedefinieerd in een van zijn bovenliggende klassen, wordt gezegd dat die methode wordt overschreven (vervangen) door de implementatie van de onderliggende klasse. Dus als er een overschreven methode in een klasse is, zal het runtime-systeem moeten beslissen welke methode-implementatie wordt gebruikt. Dit probleem wordt opgelost door te kijken naar het exacte type object dat wordt gebruikt om het aan te roepen. Als een object van de bovenliggende klasse wordt gebruikt om de overschreven methode aan te roepen, wordt de implementatie in de bovenliggende klasse gebruikt. Evenzo, als het een object is van de onderliggende klasse die wordt gebruikt, wordt de implementatie van de onderliggende klasse gebruikt. Moderne programmeertalen zoals Java, Eifell, C++ en Python maken het overschrijven van methoden mogelijk.
Wat is overbelasting?
Overbelasting van methoden is een functie die door sommige programmeertalen wordt geboden om meer dan één methode met dezelfde naam te maken, maar met verschillende invoer- en uitvoertypen. In moderne programmeertalen zoals Java, C, C++ en VB. NET is deze functie beschikbaar. U kunt een methode overbelasten door een andere methode te maken met dezelfde naam maar met een andere methodehandtekening of een ander retourtype (of beide). Als je bijvoorbeeld methode1(type1 t1) en methode1(type2 t2) binnen dezelfde klasse hebt, dan zijn ze overbelast. Dan zal het systeem moeten beslissen welke moet worden uitgevoerd wanneer het wordt aangeroepen. Dit onderscheid wordt gemaakt door te kijken naar het type parameter(s) dat aan de methode is doorgegeven. Als het argument van type1 is, wordt de eerste implementatie aangeroepen, terwijl als het van type2 is, de tweede implementatie wordt aangeroepen.
Wat is het verschil tussen overschrijven en overbelasten?
Hoewel methodeoverriding en methodeoverbelasting worden gebruikt om een methode met verschillende implementaties te bieden, zijn er belangrijke verschillen tussen deze twee concepten/technieken. Ten eerste blijven onderwerpen van method overriding altijd binnen verschillende klassen, terwijl onderwerpen van method overloading binnen dezelfde klasse blijven. Dat betekent dat overschrijven alleen mogelijk is in objectgeoriënteerde programmeertalen die overerving mogelijk maken, terwijl overbelasting ook beschikbaar kan zijn in een niet-objectgeoriënteerde taal. Met andere woorden, je overschrijft een methode in de superklasse, maar je overbelast een methode binnen je eigen klasse.
Een ander verschil is dat overschreven methoden dezelfde methodenaam, methodehandtekening en retourtype hebben, maar overbelaste methoden moeten verschillen in handtekening of retourtype (de naam moet hetzelfde zijn). Om onderscheid te maken tussen twee overschreven methoden, het exacte type object dat wordt gebruikt om de gebruikte methoden-ID aan te roepen, terwijl om onderscheid te maken tussen twee overbelaste methoden de typen parameters worden gebruikt. Een ander belangrijk verschil is dat overbelasting wordt opgelost tijdens het compileren, terwijl overschrijven tijdens runtime wordt opgelost.