Junior
Când este considerat un metod ca fiind suprascris (overriding)?
sobes.tech AI
Răspuns de la AI
Un metod este considerat suprascris atunci când într-o clasă derivată se declară o metodă cu aceeași semnătură (numele metodei, numărul și tipurile parametrilor în aceeași ordine) ca și metoda din clasa părinte. În plus:
- Metoda din clasa părinte nu trebuie să fie declarată ca
final(sau un modificator echivalent în alte limbaje), care împiedică suprascrierea. - Nivelul de acces al metodei suprascrise în clasa derivată nu poate fi mai restrictiv decât cel din clasa părinte.
- Metoda suprascrisă poate returna același tip ca și metoda din clasa părinte sau un tip covariant (subtip al tipului original).
- Metoda suprascrisă nu poate arunca excepții mai generale (sau incompatibile) decât cele declarate în metoda din clasa părinte.
- Metodele statice nu pot fi suprascrise, doar ascunse (hidden).
Când se apelează metoda suprascrisă printr-o referință la clasa părinte, dar cu un obiect al clasei derivate, se execută versiunea metodei din clasa derivată (polimorfism).
// Exemplu în Java
class Parent {
public void display() { // Metoda din clasa părinte
System.out.println("Parent display");
}
// final void cannotOverride() { ... } // Această metodă nu poate fi suprascrisă
}
class Child extends Parent {
@Override // Anotarea @Override ajută compilatorul să verifice dacă metoda este cu adevărat suprascrisă
public void display() { // Metodă suprascrisă - aceeași semnătură
System.out.println("Child display");
}
}