Sobes.tech
Junior

Kdy je metoda považována za přepsanou (overriding)?

sobes.tech AI

Odpověď od AI

Metoda se považuje za přepsanou, když je v odvozené třídě deklarována metoda se stehou signaturou (název metody, počet a typy parametrů ve stejném pořadí) jako metoda v rodičovské třídě. Navíc:

  1. Metoda v rodičovské třídě nesmí být deklarována jako final (nebo ekvivalentní modifikátor v jiných jazycích), což zakazuje přepsání.
  2. Úroveň přístupu přepsané metody v odvozené třídě nesmí být restriktivnější než u metody v rodičovské třídě.
  3. Přepsaná metoda může vracet stejný typ jako metoda v rodičovské třídě nebo kovariantní typ (podtyp původního typu).
  4. Přepsaná metoda nesmí vyhazovat výjimky, které jsou obecnější (nebo neslučitelné) než výjimky deklarované v rodičovské metodě.
  5. Statické metody nelze přepsat, pouze skrýt (hidden).

Při volání přepsané metody přes odkaz na rodičovskou třídu, ale s objektem odvozené třídy, se provádí verze metody z odvozené třídy (polymorfismus).

// Příklad v Javě

class Parent {
    public void display() { // Metoda v rodičovské třídě
        System.out.println("Parent display");
    }

    // final void cannotOverride() { ... } // Tato metoda nemůže být přepsána
}

class Child extends Parent {
    @Override // Anotace @Override pomáhá překladači zkontrolovat, že metoda je skutečně přepsána
    public void display() { // Přepsaná metoda - stejná signatura
        System.out.println("Child display");
    }
}