Menetelmän ylikuormitus, joka tunnetaan myös nimellä Funktion ylikuormitus tai Kompilointiajan polymorfismi, on käsite, jossa on kaksi tai useampia menetelmiä, joilla on sama nimi, mutta eri allekirjoitus samalla laajuudella. On monia ohjelmointikieliä, jotka tukevat tätä ominaisuutta: Ada, C ++, C #, D ja Java.
Esimerkki menetelmän ylikuormituksesta C #
class OverloadShapes {float Polygon (int säde, float pi) {float circleArea = pi * säde * säde; } int Polygon (int pituus, leveys) {int rectangleArea = pituus * leveys; } int Polygon (int puolella) {int squareArea = puoli * puoli; }}1 2 3 4 5 6 7 8 9 10 11 12 13 14 | class OverloadShapes {float Polygon (int säde, float pi) {float circleArea = pi * säde * säde; } int Polygon (int pituus, leveys) {int rectangleArea = pituus * leveys; } int Polygon (int puolella) {int squareArea = puoli * puoli; }} |
Kuten edellä esitetystä esimerkistä käy ilmi, menetelmä "monikulmio" on ylikuormittunut 3 kertaa eri menetelmien allekirjoituksella, eli tyyppi tai parametrien lukumäärä on erilainen.
Menetelmä ohittaminen
Menetelmän ohittaminen, joka tunnetaan myös nimellä Funktion overriding tai Run time polymorphism, on OOP-ominaisuus, jonka avulla lapsi-luokka voi tarjota oman toteutuksen vanhemmassa luokassa määritellylle menetelmälle. Lapsiluokan toteutus ohittaa perusluokan menetelmän määrittelyn edellyttäen, että lapsiluokan menetelmällä pitäisi olla sama nimi, allekirjoitus ja palautustyyppi.
Esimerkki C # -menetelmän ohittamisesta
luokka Source1 {public void draw () {Console.Writeline ("Olen luokassa Source1"); }} luokka Source2 laajentaa Source1 {public void draw () {Console.Writeline ("Olen luokassa Source2"); }}1 2 3 4 5 6 7 8 9 10 | luokka Source1 {public void draw () {Konsoli. Writeline ("Olen luokassa Source1"); }} luokka Source2 laajentaa Source1 {public void draw () {Console. Writeline ("Olen luokassa Source2"); }} |
Tässä Source2-luokan vetomenetelmä ohittaa Source1-luokassa määritetyn vetomenetelmän.
Menetelmän ylikuormituksen ja menetelmän ohittamisen välinen ero
- Menetelmässä ylikuormituksessa on oltava erilainen allekirjoitus. Menetelmässä ensisijaisilla menetelmillä on oltava sama allekirjoitus.
- Toiminnon ylikuormitus on "lisätä" tai "laajentaa" enemmän menetelmien käyttäytymiseen. Toimintojen ohittaminen on täysin "muuttaa" tai "määrittää uudelleen" menetelmän käyttäytyminen.
- Menetelmän ylikuormitusta käytetään aikaansaamaan kompilointiajan polymorfismi; menetelmän ohittamista käytetään ajallisen polymorfismin aikaansaamiseksi.
- Menetelmässä / funktiossa ylikuormitus kääntäjä tietää, mikä kohde, joka on määritetty mihin luokkaan kokoamisen aikana, mutta menetelmässä, joka ohittaa tämän informaation, ei ole tiedossa ennen runtime.
- Toiminto Ylikuormitus tapahtuu samassa luokassa, kun taas ylivalinta tapahtuu luokassa, joka on peräisin perusluokasta.