Diferența dintre depășire și supraîncărcare

Anonim

Suprascrierea vs. suprasolicitarea

Metoda de suprascriere și metoda Supraîncărcarea sunt două concepte / tehnici / caracteristici găsite în unele limbi de programare. Ambele concepte permit programatorului să furnizeze diferite implementări pentru metode cu același nume. Anularea metodelor permite programatorului să furnizeze o implementare alternativă în cadrul unei clase subsecvente unei metode deja definite în clasa super. Supraîncărcarea metodelor permite programatorului să furnizeze diferite implementări la mai multe metode cu același nume (în cadrul aceleiași clase).

Ce este suprimarea?

După cum sa menționat mai sus, o clasă poate extinde o clasă super sau o clasă parentală, în limbi de programare orientate obiect. O clasă de copii poate avea propriile metode sau poate avea opțional propriile implementări la metode deja definite în clasa părinte (sau una din clasele sale mamă mari). Deci, atunci când aceasta se întâmplă, se numește metodă imperativă. Cu alte cuvinte, dacă clasa copil oferă o implementare la o metodă cu aceeași semnătură și tip de retur ca o metodă deja definită într-una din clasele sale părinte, această metodă se spune că este suprascrisă (înlocuită) prin implementarea clasei copil. Deci, dacă există o metodă suprascrisă într-o clasă, sistemul runtime va trebui să decidă ce metodă de implementare este utilizată. Această problemă este rezolvată prin analizarea tipului exact al obiectului folosit pentru ao invoca. Dacă un obiect al clasei părinte este folosit pentru a invoca metoda suprascrisă, atunci se folosește implementarea în clasa parentală. În mod similar, dacă este un obiect al clasei copil care este folosit, atunci se folosește implementarea clasei copilului. Limbile de programare moderne, cum ar fi Java, Eifell, C ++ și Python, permit depășirea metodei.

Ce este supraîncărcarea?

Suprasarcina metodelor este o caracteristică oferită de unele limbi de programare pentru a crea mai multe metode cu același nume, dar cu diferite tipuri de intrări și ieșiri. În limbile moderne de programare precum Java, C #, C ++ și VB. NET, această funcție este disponibilă. Puteți suprasolicita o metodă prin crearea unei alte metode cu același nume, dar cu o altă semnătură de metodă sau cu un alt tip de retur (sau ambele). De exemplu, dacă aveți metoda1 (type1 t1) și method1 (type2 t2) în cadrul aceleiași clase, acestea sunt supraîncărcate. Apoi, sistemul va trebui să decidă care dintre ele urmează să fie executat atunci când este apelat. Această diferențiere se face prin analizarea tipului de parametru (parametri) care a fost transmis metodei. Dacă argumentul este de tip1, atunci prima implementare este apelată, în timp ce dacă este de tip2, atunci se cere a doua implementare.

Care este diferența dintre suprasolicitare și supraîncărcare?

Deși metodele de suprasolicitare și de suprasolicitare a metodelor sunt folosite pentru a furniza o metodă cu diferite implementări, există diferențe-cheie între aceste două concepte / tehnici. În primul rând, subiecții metodei principale rămân întotdeauna în cadrul diferitelor clase, în timp ce subiecții de suprasolicitare a metodelor rămân în aceeași clasă. Asta înseamnă că suprascrierea este posibilă numai în limbile de programare orientate obiect care permit moștenirea, în timp ce supraîncărcarea poate fi disponibilă și într-o limbă non-obiect orientată. Cu alte cuvinte, suprascrieți o metodă în clasa super, dar supraîncărcați o metodă din clasa proprie.

O altă diferență este că metodele suprascrise au același nume de metodă, semnătura metodei și tipul de returnare, dar metodele supraîncărcate trebuie să difere fie prin semnătura, fie prin tipul de retur (numele trebuie să fie același). Pentru a diferenția între două metode depășite, tipul exact al obiectului folosit pentru a invoca idul de metode folosit, în timp ce pentru a diferenția între două metode supraîncărcate se folosesc tipurile de parametri. O altă diferență esențială este faptul că supraîncărcarea este rezolvată la timpul de compilare, în timp ce depășirea este rezolvată în timpul execuției.