Vad är metodöverbelastning?

Metodöverbelastning är en funktion i de flesta objektorienterade programmeringsspråk där två eller flera metoder delar samma namn men har olika parametrar. Specifikt är antalet, datatypen och/eller ordningen för parametrarna olika. När koden är kompilerad kommer rätt metod att väljas automatiskt baserat på hur den anropas. Metoder är också kända som funktioner i vissa programmeringsspråk, så metodöverbelastning kallas ibland för funktionsöverbelastning.

Ett enkelt exempel på metodöverbelastning skulle vara en metod som beräknar arean av en kvadrat. Det kan definieras som getArea(Square s). Denna metod kan överbelastas för att ytterligare beräkna cirkelns area genom att lägga till metoden getArea(Circle c).

Det primära kravet för metodöverbelastning är att metoderna delar samma namn. Deras metodsignaturer – metodnamnet, antalet parametrar och parameterdatatyperna – borde annars vara unika. På detta sätt kan kompilatorn bestämma vilken metod som ska köras.

Konstruktörer, metoderna som används för att instansiera objekt, är ofta överbelastade. Detta görs för att initiera ett objekt med icke-standardvärden. Till exempel kan ett anställdobjekt med två fält (namn och födelsedatum eller dob) ha följande överbelastade konstruktorer: Employee(), Employee(name) och Employee(name, dob). Den första konstruktorn skapar ett anställdobjekt med tomma namn- och dob-fält. Den andra anger namnfältet, men lämnar dob-fältet tomt, och den tredje definierar både namn- och dob-fälten.

Metodöverbelastning görs oftast för att få mer än en metod att framstå logiskt som en enda metod. I exemplet getArea(), medan det finns fysiskt två metoder, presenteras anroparen med en enda, logisk getArea()-metod. På detta sätt kan getArea() utökas för att fungera på andra former – trianglar, trapetser och så vidare – samtidigt som det fortfarande presenterar sig logiskt som en enda metod.

Metoder är också överbelastade för att bevara bakåtkompatibilitet. En metod som gör en komplex beräkning skulle kunna få ett nytt krav på att valfritt utföra samma beräkning med en liten förändring. En ny parameter läggs till i metoden som avgör hur beräkningen ska utföras – det gamla eller det nya sättet.
För att slippa hitta alla fall där metoden anropas och lägga till den nya parametern kan metoden överbelastas. Den nya metoden kommer att ha den gamla signaturen och anropas av befintlig kod. Den kommer inte att innehålla någon logik i sig, och kommer helt enkelt att anropa den modifierade metoden och skickas som standard på ”gammalt sätt” för den nya parametern. Ny kod kommer att anropa den modifierade metoden och skicka den nya parametern med rätt värde, gammalt eller nytt sätt.
Metodöverbelastning är en typ av polymorfism, där samma logiska metod i praktiken kan användas på flera sätt. Metodöverbelastning är inte detsamma som metodöverstyrning. Metodöverstyrning är där definitionen av en metod i en överordnad klass ändras av en underordnad klass. I det här fallet kommer båda metoderna att ha samma signatur.