Sobes.tech
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:

  1. Metoda din clasa părinte nu trebuie să fie declarată ca final (sau un modificator echivalent în alte limbaje), care împiedică suprascrierea.
  2. Nivelul de acces al metodei suprascrise în clasa derivată nu poate fi mai restrictiv decât cel din clasa părinte.
  3. Metoda suprascrisă poate returna același tip ca și metoda din clasa părinte sau un tip covariant (subtip al tipului original).
  4. Metoda suprascrisă nu poate arunca excepții mai generale (sau incompatibile) decât cele declarate în metoda din clasa părinte.
  5. 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");
    }
}