Sobes.tech
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:

  1. Metóda v rodičovskej triede nesmie byť deklarovaná ako final (alebo ekvivalentný modifikátor v iných jazykoch), čo zakazuje prepísanie.
  2. Úroveň prístupu prepísanej metódy v odvodenom triede nemôže byť restriktívnejšia ako v rodičovskej triede.
  3. Prepísaná metóda môže vracať rovnaký typ ako metóda v rodičovskej triede alebo kovariantný typ (podtyp pôvodného typu).
  4. 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.
  5. 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");
    }
}