Sobes.tech
Junior

Kedy sa metóda považuje za prepísanú?

sobes.tech AI

Odpoveď od AI

Metóda sa považuje za prepísanú v nasledujúcich prípadoch:

  1. Je deklarovaná v odvodenom triede.
  2. Má rovnaké meno ako metóda v rodičovskej triede.
  3. Má rovnakú signatúru (počet a typy parametrov) a poradie parametrov.
  4. Má typ návratovej hodnoty kompatibilný s typom návratovej hodnoty metódy v rodičovskej triede (kovariancia, ak je to relevantné).
  5. Má rovnaký alebo širší prístupový modifikátor ako metóda v rodičovskej triede (v väčšine objektovo orientovaných jazykov).
  6. Rodičovská metóda je deklarovaná ako virtuálna, abstraktná alebo rozhranie (v jazykoch, ktoré vyžadujú explicitné označenie možnosti prepísania, napríklad C# s kľúčovým slovom virtual).

Príklad v Jave:

// Rodičovská trieda
class SuperClass {
    // Metóda, ktorú možno prepísať
    public void display() {
        System.out.println("Toto je display metóda triedy SuperClass.");
    }
}

// Odvodená trieda
class SubClass extends SuperClass {
    // Prepísaná display metóda
    @Override // Anotácia na kontrolu prepísania počas kompilácie
    public void display() {
        System.out.println("Toto je display metóda triedy SubClass.");
    }
}

Príklad v Pythone:

# Rodičovská trieda
class SuperClass:
    # Metóda, ktorú možno prepísať
    def display(self):
        print("Toto je display metóda triedy SuperClass.")

# Odvodená trieda
class SubClass(SuperClass):
    # Prepísaná display metóda
    def display(self):
        print("Toto je display metóda triedy SubClass.")

Kľúčom je zachovať názov a signatúru metódy, ale zmeniť jej správanie v odvodenom triede.

Dôležitý rozdiel od overloading:

Overloading je deklarácia viacerých metód s rovnakým názvom v jednej triede, ale s rôznymi signatúrami. Overriding je deklarácia metódy v odvodenom triede s rovnakým názvom a signatúrou ako v rodičovskej triede.