Junior
Proqramlaşdırmada Overriding (Yenidən Yazma) nədir?
sobes.tech Süni İntellekt
AI-dan cavab
Yenidənqurma metodu (Overriding) — bu, alt sinfin artıq öz valideyn sinfində müəyyən edilmiş metodu öz tərzində təqdim etmək imkanını verir. Yenidənqurma metodunun imzası (ad, parametr sayı və növləri) alt sinifdə tamamilə valideyn sinfindəki metodun imzası ilə uyğun olmalıdır. Qaytarılan dəyərin tipi də ya eyni, ya da valideyn metodunun qaytarılan tipinin kovariant (alt tipi) olmalıdır.
Yenidənqurma ilə bağlı əsas aspektlər:
- İrsi: Yenidənqurma yalnız irsi münasibətlər kontekstində mümkündür, burada alt sinif valideyn sinifdən metodu irsi alır.
- Polimorfizm: Yenidənqurma, vaxtında çoxbiçimlilik (runtime polymorphism) həyata keçirmə mexanizmlərindən biridir. Bu, obyektin faktiki növünə görə, valideyn növü vasitəsilə çağırılan metodun uyğun implementasiyasının işlədiləcəyini göstərir (valideyn və ya alt sinifdən).
@Overrideaçar sözü: Bəzi dillərdə (məsələn, Java)@Overrideannotasiyası istifadə olunur. Bu, yenidənqurma üçün zəruri deyil, lakin kodun oxunaqlığını artırmaq və yenidənqurma qaydalarına uyğun olmayan metodların tənqidini qarşısını almaq üçün tövsiyə olunur.- Valideyn metoduna çıxış: Yenidənqurma edilmiş metod daxilində, çox vaxt, valideyn sinifin eyni metodunu çağırmaq lazım olur. Bunun üçün
superaçar sözü istifadə olunur (məsələn,super.metod()).
Java nümunəsi:
// Valideyn sinfi
class Animal {
// Valideyn sinfində metod
void makeSound() {
System.out.println("Heyvan səs çıxarır");
}
}
// Animal-dən irsi alan alt sinif
class Dog extends Animal {
// makeSound() metodunun yenidənqurulması
@Override
void makeSound() {
System.out.println("Hav-hav!");
}
// Valideyn metodunu çağırma nümunəsi
void eat() {
System.out.println("İt yeyir.");
super.makeSound(); // Valideyn sinfin metodunu çağırır
}
}
class Main {
public static void main(String[] args) {
Animal myAnimal = new Animal();
Animal myDog = new Dog(); // Polimorfizm
myAnimal.makeSound(); // Çıxış: Heyvan səs çıxarır
myDog.makeSound(); // Çıxış: Hav-hav! (Yenidənqurulmuş metod çağırılır)
Dog specificDog = new Dog();
specificDog.eat(); // Çıxış: İt yeyir.
// Heyvan səs çıxarır
}
}
Python nümunəsi:
# Valideyn sinfi
class Animal:
# Valideyn sinfində metod
def make_sound(self):
print("Heyvan səs çıxarır")
# Animal-dən irsi alan alt sinif
class Dog(Animal):
# make_sound() metodunun yenidənqurulması
def make_sound(self):
print("Hav-hav!")
# Valideyn metodunu çağırma nümunəsi
def eat(self):
print("İt yeyir.")
super().make_sound() # Valideyn sinfin metodunu çağırır
# Nümayiş
my_animal = Animal()
my_dog = Dog() # Polimorfizm
my_animal.make_sound() # Çıxış: Heyvan səs çıxarır
my_dog.make_sound() # Çıxış: Hav-hav!
specific_dog = Dog()
specific_dog.eat() # Çıxış: İt yeyir.
# Heyvan səs çıxarır
Yenidənqurma, əsas sinfin davranışını alt sinfinin xüsusiyyətlərinə uyğunlaşdırmaq üçün istifadə olunur və ümumi interfeysi saxlayır. Bu, obyekt yönümlü dizaynın əsas elementidir.