Keskeinen ero : Ylikuormituksella tarkoitetaan kahta samaa luokkaa vastaavaa menetelmää, joilla on sama nimi ja erilaiset parametrityypit, kun taas ylivoimaisilla välineillä on kaksi eri menetelmää samassa luokassa samojen parametrityyppien kanssa, mutta erilaisilla toteutuksilla.
Menetelmät, jotka ylittävät ja ylikuormittavat, ovat java-ohjelmointikielillä käytettyjä käsitteitä tai tekniikoita. Molemmat käsitteet antavat ohjelmoijalle mahdollisuuden tarjota erilaisia toteutuksia samalle nimelle. Tässä artikkelissa erotetaan ohjelmoinnin kaksi käsitettä.
Toimintojen ylikuormitus tai menetelmien ylikuormitus mahdollistaa useiden menetelmien luomisen samalle nimelle samassa luokassa, mutta eroavat toisistaan toiminnon tulossa ja lähtötyypissä. Se määritellään yksinkertaisesti yhden funktion kyvyksi suorittaa erilaisia tehtäviä.
Ylikuormituksessa menetelmän toteutuksilla on sama nimi, koska ne suorittavat samanlaisia tehtäviä. Myös ylikuormitusta pidetään luonteeltaan polymorfisena. Toiminnot, joilla on erilaiset toteutukset, riippuvat niiden määritetyistä argumenttityypeistä. Se liittyy yleensä staattisiin ohjelmointikieliin, jotka pakottavat tyyppihyväksynnän toiminnallisissa puheluissa. Sitä pidetään myös käytännöllisenä, koska sen avulla ohjelmoija voi kirjoittaa useita erilaisia menetelmiä samaan luokkaan. Ylikuormitettaessa runtime-prosessori kuitenkin muuttaa kaikkien ylikuormitettujen menetelmien nimeä, mikä voi olla ongelma.
Menetelmä, joka ohittaa objektorientoidussa ohjelmoinnissa, on ominaisuus, joka sallii aliluokan tai lapsiluokan tarjota tietyn toteutusmenetelmän, joka on jo jonkin sen superluokan tai vanhemman luokan tarjoama. Alaluokan toteutus ohittaa tai korvaa vanhemman luokan toteutuksen antamalla saman nimen, samojen parametrien tai allekirjoituksen mukaisen menetelmän ja saman palautustyypin kuin vanhemman luokan menetelmä.
Menetelmän ohittamisessa toiminnot koodataan suorittamaan ohjelmassa tiettyjä tehtäviä. Ohjaus riippuu perusluokan toiminnasta sen ulkonäölle. Tällöin suoritettu toiminto määräytyy sen kohteen mukaan, jota käytetään sen kutsumiseen, eli jos vanhemman luokan kohdetta käytetään menetelmän kutsumiseen, silloin suoritetaan vanhemman luokan toiminto. Korvaus on luonteeltaan polymorfista; se auttaa suunnittelemaan ensimmäiseen implisiittiseen parametriin perustuvia ohjelmia, jotka voidaan ratkaista ajonaikaisesti. Javassa on joitakin kieliä, joiden avulla ohjelmoija voi estää menetelmän ohittamisen.
Ylikuormituksen ja ohittamisen vertailu:
Ylikuormitus | ensisijainen | |
Määritelmä | Se tarkoittaa, että samalla luokalla on saman luokan menetelmiä, mutta kullakin menetelmällä on erilaiset parametrit tai niillä on samat parametrit eri tyypeillä ja järjestyksillä. | Se tarkoittaa, että sillä on sama luokka, jolla on samat menetelmät samalla nimellä ja täsmälleen saman tyyppiset parametrit ja sama palautustyyppi kuin superluokka. |
merkitys | Se tarkoittaa, että useammalla kuin yhdellä menetelmällä on sama nimi samassa luokassa, mutta niillä on eri allekirjoitus. | Se tarkoittaa, että perusluokan menetelmä määritellään uudelleen johdetussa luokassa samalla allekirjoituksella. |
käytös | Se lisää tai laajentaa menetelmien käyttäytymistä. | Se muuttaa menetelmän olemassa olevaa käyttäytymistä. |
polymorfismi | Se on kääntymisajan polymorfismi. | Se on ajoaikapolymorfismi. |
Staattinen menetelmä | Staattinen menetelmä voidaan ylikuormittaa. | Staattista menetelmää ei voi ohittaa. |
side | Staattinen sidos. | Dynaaminen sidos. |
perintö | Se voi edellyttää tai ei tarvitse periä. | Se vaatii aina perintöä. |
yhdistys | Se liittyy yleensä staattisiin ohjelmakieliin. | Se liittyy yleensä objektiin suuntautuviin ohjelmiin. |
Allekirjoitus | Menetelmillä on erilainen allekirjoitus. | Menetelmillä on oltava sama allekirjoitus. |
Nopeus | Se on nopeampi kuin ylivoimainen. | Se on hidasta verrattuna ylikuormitukseen. |
Luokat | Se ei vaadi useampaa kuin yhtä luokkaa ylikuormitukseen. | Se vaatii vähintään kaksi luokkaa ylikuormitukseen. |
Taso | Menetelmillä voi olla jokin pääsy. | Menetelmillä on sama tai laaja käyttöoikeustaso. |
esimerkki | Luokka Lisää { int sum (int a, int b) { palauta a + b; } int sum (int a) { palaa a + 10; } } | Luokka A // Super-luokka { tyhjä näyttö (int num) { tulosta numero; } } // Luokka B perii luokan A Luokka B // Alaluokka { tyhjä näyttö (int num) { tulosta numero; } } |