Metodo perkrovimas, dar vadinamas funkcijų perkrovimu arba Kompiliavimo laiko polimorfizmu, yra dviejų ar daugiau metodų, turinčių tą patį pavadinimą, tačiau skirtingo parašo, sąvoka. Yra daug programavimo kalbų, kurios palaiko šią funkciją: Ada, C ++, C #, D ir Java.
Metodo perkrovos C # pavyzdys
klasė OverloadShapes {float Polygon (int radius, float pi) {float circleArea = pi * spindulys * spindulys; } int Poligonas (int ilgis, pločio plotis) {int stačiakampisArea = ilgis * plotis; } int Poligonas (int pusė) {int squareArea = šoninė * pusė; }}1 2 3 4 5 6 7 8 9 10 11 12 13 14 | klasė OverloadShapes {float Polygon (int radius, float pi) {float circleArea = pi * spindulys * spindulys; } int Poligonas (int ilgis, pločio plotis) {int stačiakampisArea = ilgis * plotis; } int Poligonas (int pusė) {int squareArea = šoninė * pusė; }} |
Kaip parodyta aukščiau pateiktame pavyzdyje, metodas „daugiakampis“ perkrautas 3 kartus skirtingu metodo parašu, ty skirtingų tipų arba parametrų skaičius.
Metodas viršesnis
Metodo viršijimas, taip pat žinomas kaip funkcijų viršijimas arba Vykdymo laiko polimorfizmas, yra OOP funkcija, leidžianti vaiko klasei suteikti savo įgyvendinimą tėvų klasėje apibrėžtam metodui. Įgyvendinimas vaiko klasėje viršija bazinės klasės metodo apibrėžimą, su sąlyga, kad vaiko klasės metodas turėtų turėti tą patį pavadinimą, parašą ir grąžinimo tipą.
C # pavyzdžio metodo pavyzdys
class Source1 {public void draw () {Console.Writeline („Aš esu klasėje Source1“); }} klasė Source2 praplečia Source1 {public void draw () {Console.Writeline („Aš esu klasėje Source2“)); }}1 2 3 4 5 6 7 8 9 10 | klasės Source1 {public void draw () {Console. Writeline („Aš esu klasėje Source1“); }} klasės Source2 praplečia Source1 {public void draw () {Console. Writeline („Aš esu klasėje Source2“); }} |
Čia Source2 klasės piešimo metodas viršija Source1 klasėje apibrėžtą piešimo metodą.
Skirtumas tarp metodo perkrovos ir metodo viršijimo
- Metodų perkrovimo metodai turi turėti skirtingą parašą. Metodai, svarbiausi metodai turi turėti tą patį parašą.
- Funkcijos perkrovimas yra „pridėti“ ar „išplėsti“ daugiau metodo elgesio. Funkcijos viršenybė yra visiškai „pakeisti“ arba „iš naujo apibrėžti“ metodo elgesį.
- Metodo perkrovimas naudojamas kompiliavimo laiko polimorfizmui pasiekti; metodo viršenybė yra naudojama siekiant paleisti laiko polimorfizmą.
- Metodų / funkcijų perkrovimo metu kompiliatorius žino, kuris objektas priskirtas tam tikrai klasei kompiliavimo metu, tačiau metodu, viršijančiu šią informaciją, nėra žinoma iki vykdymo.
- Funkcija Perkrovimas vyksta toje pačioje klasėje, o viršijimas vyksta klasėje, gautoje iš bazinės klasės.