Sobes.tech
Junior

Кога се случва преопределянето на метод (overriding)?

sobes.tech AI

Отговор от AI

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

Ключови характеристики:

  • Наследяване: Презаписването е възможно само в контекста на наследяване (родителски и подкласове).
  • Сигнатура: Методът в подклас трябва да има същата сигнатура (име, брой и типове на параметрите) и тип на връщане (или негов ковариантен подтип), както методът в родителския клас.
  • Достъпност: Методът, който се презаписва, трябва да бъде достъпен за подклас (обикновено public, protected).
  • Полиморфизъм: Презаписването е основата на полиморфизма в време на изпълнение (runtime polymorphism), позволявайки на обектите от подклас да реагират на извикване на метода по свой собствен начин, дори ако към тях се обръщаме чрез препратка към родителския клас.

Пример (Java):

// Родителски клас
class Animal {
    // Метод, който ще бъде презаписан
    public void makeSound() {
        System.out.println("Животното издава звук");
    }
}

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

Пример за използване:

// Създаване на обект Dog
Animal myDog = new Dog();
// Извикване на метода. Ще бъде извикана презаписаната версия от Dog
myDog.makeSound(); // Изход: Кучето лае

// Създаване на обект Animal
Animal someAnimal = new Animal();
// Извикване на метода. Ще бъде извикана версията от Animal
someAnimal.makeSound(); // Изход: Животното издава звук