Sobes.tech
Junior

Când este considerat un metod ca fiind suprascris?

sobes.tech AI

Răspuns de la AI

Metoda este considerată suprascrisă în următoarele cazuri:

  1. Este declarată într-o clasă derivată.
  2. Are același nume ca metoda din clasa părinte.
  3. Are aceeași semnătură (număr și tipuri de parametri) și ordinea parametrilor.
  4. Are un tip de return compatibil cu cel al metodei din clasa părinte (covarianță, dacă este cazul).
  5. Are un modificator de acces egal sau mai larg decât cel al metodei din clasa părinte (în majoritatea limbajelor orientate pe obiect).
  6. Metoda părinte este declarată ca virtuală, abstractă sau de interfață (în limbajele care necesită indicarea explicită a posibilității de suprascriere, de exemplu C# cu cuvântul cheie virtual).

Exemplu în Java:

// Clasa părinte
class SuperClass {
    // Metodă care poate fi suprascrisă
    public void display() {
        System.out.println("Aceasta este metoda display a SuperClass.");
    }
}

// Clasa derivată
class SubClass extends SuperClass {
    // Metodă suprascrisă display
    @Override // Anotare pentru verificarea suprascrierii la compilare
    public void display() {
        System.out.println("Aceasta este metoda display a SubClass.");
    }
}

Exemplu în Python:

# Clasa părinte
class SuperClass:
    # Metodă care poate fi suprascrisă
    def display(self):
        print("Aceasta este metoda display a SuperClass.")

# Clasa derivată
class SubClass(SuperClass):
    # Metodă suprascrisă display
    def display(self):
        print("Aceasta este metoda display a SubClass.")

Cheia este păstrarea numelui și semnăturii metodei, dar schimbarea comportamentului acesteia în clasa derivată.

Diferența importantă față de overload:

Overloading este declararea mai multor metode cu același nume într-o clasă, dar cu semnături diferite. Overriding este declararea unei metode într-o clasă derivată cu același nume și semnătură ca și în clasa părinte.