Ključna razlika : Preobremenitev pomeni imeti dve metodi istega razreda z istim imenom in različnimi tipi parametrov, medtem ko pomeni preglasitev dve različni metodi v istem razredu z enakimi tipi parametrov, vendar z različnimi izvedbami.
Prekoračitev in preobremenitev metod sta dva koncepta ali tehnike, ki se uporabljata v programskih jezikih jave. Oba koncepta omogočata programerju zagotoviti različne izvedbe za metode pod istim imenom. Ta članek razlikuje med obema konceptoma programiranja.
Preobremenitev funkcij ali preobremenitev metode omogoča ustvarjanje več metod pod istim imenom, v istem razredu, vendar se razlikujejo med seboj v vhodnem in izhodnem tipu funkcije. To je preprosto definirano kot zmožnost ene funkcije za opravljanje različnih nalog.
Pri preobremenitvi imajo implementacije metod isto ime, ker opravljajo podobne naloge. Tudi preobremenitev se šteje za polimorfno. Funkcije z različnimi izvedbami so odvisne od njihovih podanih vrst argumentov. Običajno je povezan s statičnimi programskimi jeziki, ki uveljavlja preverjanje tipa v klicih funkcij. Prav tako se šteje za praktično, saj omogoča programerju, da napiše več različnih metod v istem razredu. Vendar pa pri preobremenitvi procesorja izvajalnega okolja spremeni ime vseh preobremenjenih metod, kar je lahko problem.
Prekrmiljenje metode, v objektno usmerjenem programiranju, je funkcija, ki omogoča podrazredu ali podrejenemu razredu, da zagotovi specifično izvedbo metode, ki jo že zagotavlja eden od njenih super razredov ali nadrejenih razredov. Implementacija v podrazredu prevlada ali nadomešča izvedbo v nadrejenem razredu z zagotavljanjem metode pod istim imenom, istimi parametri ali podpisom in enako vrsto vrnitve kot metoda v nadrejenem razredu.
Pri prekoračitvi metod so funkcije kodirane za izvajanje določenih nalog v programu. Preglasitev je odvisna od prisotnosti funkcije osnovnega razreda za njen videz. V tem primeru je izvršena funkcija določena z objektom, ki se uporablja za njegovo priklic, tj. Če se objekt iz nadrejenega razreda uporablja za priklic metode, se izvede funkcija v nadrejenem razredu. Prekoračitev je polimorfna v naravi; pomaga oblikovati programe, ki temeljijo na prvem implicitnem parametru, ki ga je mogoče rešiti med izvajanjem. Obstaja nekaj jezikov, ki omogočajo programerju, da prepreči preglasitev metode.
Primerjava med preobremenitvijo in razveljavitvijo:
Preobremenitev | Preglasitev | |
Opredelitev | To pomeni, da imajo metode istega razreda pod istim imenom, vendar ima vsaka metoda različne parametre ali ima iste parametre z različnimi vrstami in vrstami. | Pomeni pod-razred z enakimi metodami pod istim imenom in popolnoma enako vrsto parametrov ter enak vrnitveni tip kot super razred. |
Pomen | To pomeni, da ima več kot ena metoda isto ime v istem razredu, vendar imajo drugačen podpis. | To pomeni, da je metoda osnovnega razreda ponovno definirana v izpeljanem razredu z istim podpisom. |
Vedenje | Dodaja ali razširja vedenje metod. | Spremeni obstoječe obnašanje metode. |
Polimorfizem | To je polimorfizem časa prevajanja. | To je polimorfizem časa delovanja. |
Statična metoda | Statična metoda je lahko preobremenjena. | Statične metode ni mogoče preglasiti. |
Bond | Statična vez. | Dinamična vez. |
Dedovanje | Lahko zahteva ali pa ne zahteva dedovanja. | Vedno potrebuje dedovanje. |
Združenje | Običajno je povezan s statičnimi programskimi jeziki. | Običajno je povezan s programi, usmerjenimi v objekt. |
Podpis | Metode imajo drugačen podpis. | Metode morajo imeti enak podpis. |
Hitrost | Je hitrejši od prevladujočega. | V primerjavi s preobremenitvijo je počasen. |
Razredi | Za preobremenitev ni potreben več kot en razred. | Zahteva vsaj dva razreda za preobremenitev. |
Raven | Metode imajo lahko katero koli stopnjo dostopa. | Metode imajo enako ali široko dostopno raven. |
Primer | Razred Add { vsota int (int a, int b) { vrne a + b; } int sum (int a) { vrne a + 10; } } | Razred A // Super razred { prazen prikaz (int num) { print num; } } // Razred B podeduje razred A Razred B // Podrazred { prazen prikaz (int num) { print num; } } |