Sobes.tech
Junior

Када се метод сматра да је преоптерећен (overriding)?

sobes.tech АИ

Одговор од АИ

Metod se smatra prepisanim kada u podklasi bude deklarovana metoda sa istom potpisom (ime metode, broj i tipovi parametara u istom redosledu) kao i u roditeljskoj klasi. Pored toga:

  1. Metod u roditeljskoj klasi ne sme biti deklarisan kao final (ili ekvivalentni modifikator u drugim jezicima), što onemogućava prepisivanje.
  2. Nivo pristupa prepisane metode u podklasi ne može biti restriktivniji od onog u roditeljskoj klasi.
  3. Prepisana metoda može vraćati isti tip kao i metoda u roditeljskoj klasi ili kovarijantni tip (podtip originalnog tipa).
  4. Prepisana metoda ne sme bacati izuzetke koji su opštiji (ili nekompatibilni) od izuzetaka deklarisanih u roditeljskoj metodi.
  5. Statičke metode ne mogu biti prepisane, samo skrivene (hidden).

Prilikom poziva prepisane metode putem reference na roditeljsku klasu, ali sa objektom podklase, izvršava se verzija metode iz podklase (polimorfizam).

// Primer na Javi

class Parent {
    public void display() { // Metoda u roditeljskoj klasi
        System.out.println("Parent display");
    }

    // final void cannotOverride() { ... } // Ovu metodu nije moguće prepisati
}

class Child extends Parent {
    @Override // Anotacija @Override pomaže kompilatoru da proveri da li je metoda zaista prepisana
    public void display() { // Prepisana metoda - ista potpis
        System.out.println("Child display");
    }
}