Metodsöverbelastning, även känd som Funktionsöverbelastning eller Kompileringstidpolymorfism, är ett begrepp med att ha två eller flera metoder med samma namn men olika signaturer i samma omfattning. Det finns många programmeringsspråk som stöder denna funktion: Ada, C ++, C #, D och Java.
Exempel på metodöverbelastning i C #
klass OverloadShapes {float Polygon (intra radie, float pi) {float circleArea = pi * radien * radien; } int Polygon (int längd, int bredd) {int rektangelArea = längd * bredd; } int Polygon (int sida) {int squareArea = sida * sida; }}1 2 3 4 5 6 7 8 9 10 11 12 13 14 | klass OverloadShapes {float Polygon (intra radie, float pi) {float circleArea = pi * radien * radien; } int Polygon (int längd, int bredd) {int rektangelArea = längd * bredd; } int Polygon (int sida) {int squareArea = sida * sida; }} |
Som visat i ovanstående exempel överlagras metoden "Polygon" 3 gånger med olika metod signatur, dvs typen eller antalet parametrar är olika.
Metod Överstyrning
Metoden överordnad, även känd som Funktionsövergripande eller Run-time-polymorfism, är en OOP-funktion som gör det möjligt för en barnklass att ge sin egen implementering till den metod som definieras i förälderklassen. Genomförandet i barnklassen strider mot definitionen av metoden i basklassen, förutsatt att metoden i barnklassen ska ha samma namn, signatur och returtyp.
Exempel på metodöverstyrning i C #
klass Source1 {public void draw () {Console.Writeline ("Jag är i klassen Source1"); }} klass Source2 utökar Source1 {public void draw () {Console.Writeline ("Jag är i klassen Source2"); }}1 2 3 4 5 6 7 8 9 10 | klass Source1 {public void draw () {Console. Writeline ("Jag är i klassen Source1"); }} klass Source2 utökar Source1 {public void draw () {Console. Writeline ("Jag är i klassen Source2"); }} |
Här åsidosätter dragningsmetoden i Source2-klassen den teckningsmetod som definierats i Source1-klassen.
Skillnad mellan metodöverbelastning och metodöverstyrning
- Metoden för överbelastning måste ha en annan signatur. I metod måste överordnade metoder ha samma signatur.
- Funktionsöverbelastning är att "lägga till" eller "förlänga" mer till metodens beteende. Funktionsövergripande är att helt "ändra" eller "omdefiniera" en metods beteende.
- Metoden överbelastning används för att uppnå kompileringstid polymorfism; metodöverstyrning används för att uppnå körtidspolymorfism.
- I metod / funktion överbelastning kompilatorn vet vilket objekt som tilldelats till vilken klass vid tidpunkten för sammanställningen, men i metod överordnad denna information är inte känd till runtime.
- Funktionsöverbelastning sker i samma klass, medan Överriding sker i en klass som härrör från en basklass.