Junior
Ce se poate modifica la suprasarcina metodelor în programare?
sobes.tech AI
Răspuns de la AI
Suprapunerea metodelor (method overloading) poate fi modificată:
- Numărul de parametri: Metodele cu același nume pot avea un număr diferit de parametri formali.
- Tipurile de parametri: Metodele cu același nume și același număr de parametri pot diferi în tipurile acestor parametri.
- Ordinea tipurilor de parametri: Dacă metodele au același număr de parametri și aceiași tipuri, dar în ordine diferită, acest lucru este considerat, de asemenea, suprapunere.
Exemplu în Java:
// Clasă cu metode suprasarcinate
class Calculator {
// Metodă de adunare a două numere întregi
public int add(int a, int b) {
return a + b;
}
// Metodă suprasarcinată: adunarea a trei numere întregi
public int add(int a, int b, int c) {
return a + b + c;
}
// Metodă suprasarcinată: adunarea a două numere cu virgulă mobilă
public double add(double a, double b) {
return a + b;
}
// Metodă suprasarcinată: adunarea unui întreg și a unui număr cu virgulă mobilă
public double add(int a, double b) {
return a + b;
}
// Metodă suprasarcinată: adunarea unui număr cu virgulă mobilă și a unui întreg
public double add(double a, int b) {
return a + b;
}
}
Ce nu poate fi schimbat la suprasarcina metodelor:
- Tipul de returnare: Două metode cu același nume și aceeași semnătură (număr, tipuri și ordine de parametri) nu pot diferi doar prin tipul de returnare.
- Modificatorii de acces: Modificatorii de acces (public, private, protected, default) nu afectează suprasarcina.
- Prezența sau absența cuvântului cheie
static: Nu se poate suprasarcina o metodă statică definind o metodă non-statică cu aceeași semnătură, sau vice versa. - Lista excepțiilor aruncate de metodă: Lista excepțiilor nu face parte din semnătura metodei și nu este utilizată de compilator pentru a distinge metodele suprasarcinate.
Compararea suprasarcinării și suprascrierii metodelor:
| Caracteristică | Suprasarcinare (Overloading) | Suprascriere (Overriding) |
|---|---|---|
| Unde are loc | În aceeași clasă sau într-o ierarhie de clase | Într-o clasă derivată |
| Numele metodei | Identic | Identic |
| Semnătura metodei | Difierită (număr, tipuri, ordine de parametri) | Identică |
| Tipul de returnare | Poate fi diferit (dar nu singura diferență) | Trebuie să fie același sau covariant (pentru obiecte) |
| Scop | Oferirea mai multor variante ale aceleiași acțiuni pentru diferite tipuri de date sau cantități de argumente | Modificarea comportamentului metodei moștenite în clasa derivată |
| Relația dintre metode | Metode independente | Relație de "este un" (moștenire) |
| Polimorfism | Polimorfism la timpul de compilare (statis) | Polimorfism la timpul de execuție (dinamic) |