Junior
Kedy sa metóda považuje za prepísanú (overriding)?
sobes.tech AI
Odpoveď od AI
Metóda sa považuje za prepísanú, keď v odvodenom triede je deklarovaná metóda so rovnakou signatúrou (názov metódy, počet a typy parametrov v rovnakom poradí) ako v rodičovskej triede. Okrem toho:
- Metóda v rodičovskej triede nesmie byť deklarovaná ako
final(alebo ekvivalentný modifikátor v iných jazykoch), čo zakazuje prepísanie. - Úroveň prístupu prepísanej metódy v odvodenom triede nemôže byť restriktívnejšia ako v rodičovskej triede.
- Prepísaná metóda môže vracať rovnaký typ ako metóda v rodičovskej triede alebo kovariantný typ (podtyp pôvodného typu).
- Prepísaná metóda nemôže hádzať výnimky, ktoré sú všeobecnejšie (alebo nekompatibilné) ako výnimky deklarované v rodičovskej metóde.
- Statické metódy nemôžu byť prepísané, iba skryté (hidden).
Pri volaní prepísanej metódy cez odkaz na rodičovskú triedu, ale s objektom odvodeného typu, sa vykoná verzia metódy z odvodeného typu (polymorfizmus).
// Príklad v Jave
class Parent {
public void display() { // Metóda v rodičovskej triede
System.out.println("Parent display");
}
// final void cannotOverride() { ... } // Túto metódu nie je možné prepísať
}
class Child extends Parent {
@Override // Anotácia @Override pomáha kompilátoru skontrolovať, či je metóda naozaj prepísaná
public void display() { // Prepísaná metóda - rovnaká signatúra
System.out.println("Child display");
}
}