Sobes.tech
Junior

Кога се счита, че методът е презаписан (overriding)?

sobes.tech AI

Отговор от AI

Методът се счита за презаписан, когато в наследяващия клас се обяви метод със същата сигнатура (име на метода, брой и типове параметри в същия ред), както и в родителския клас. Освен това:

  1. Методът в родителския клас не трябва да бъде обявен като final (или еквивалентен модификатор в други езици), който забранява презаписването.
  2. Нивото на достъп на презаписания метод в наследяващия клас не може да бъде по-ограничително от това в родителския клас.
  3. Презаписаният метод може да връща същия тип като този в родителския клас или ковариантен тип (подтип на оригиналния тип).
  4. Презаписаният метод не може да хвърля по-общи (или несъвместими) изключения, отколкото тези, обявени в родителския метод.
  5. Статичните методи не могат да бъдат презаписвани, само скрити (hidden).

При извикване на презаписания метод чрез препратка към родителския клас, но с обект на наследяващия клас, се изпълнява версията на метода от наследяващия клас (полиморфизъм).

// Пример на Java

class Parent {
    public void display() { // Метод в родителския клас
        System.out.println("Parent display");
    }

    // final void cannotOverride() { ... } // Този метод не може да бъде презаписан
}

class Child extends Parent {
    @Override // Анотация @Override помага на компилатора да провери, че методът наистина се презаписва
    public void display() { // Презаписан метод - същата сигнатура
        System.out.println("Child display");
    }
}