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:
- 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í. - Úroveň přístupu přepsané metody v odvozené třídě nesmí být restriktivnější než u metody v rodičovské třídě.
- Přepsaná metoda může vracet stejný typ jako metoda v rodičovské třídě nebo kovariantní typ (podtyp původního typu).
- Přepsaná metoda nesmí vyhazovat výjimky, které jsou obecnější (nebo neslučitelné) než výjimky deklarované v rodičovské metodě.
- 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");
}
}