Junior
Dasturlashda qayta yozish (Overriding) nima?
sobes.tech AI
AIdan javob
Metodani qayta yozish (Overriding) - bu vorislik munosabatlarida mavjud bo'lgan metodning o'ziga xos amalga oshirilishini ta'minlash imkoniyatidir. Qayta yoziladigan metodning (ism, parametrlar soni va turlari) imzosi vorislikda to'liq mos kelishi kerak. Qaytariladigan qiymat turi ham xuddi shunday yoki vorislikdagi (subtip) bo'lishi kerak.
Qayta yozishning asosiy jihatlari:
- Merosi: Qayta yozish faqat meros munosabatlari kontekstida mumkin, bu yerda vorislikda voris sinf ota sinfdan metod meros oladi.
- Polimorfizm: Qayta yozish - bu bajarilish vaqtida (runtime polymorphism) polimorfizmni amalga oshirishning bir mexanizmi. Bu shuni anglatadiki, ob'ektning haqiqiy turi, ota turiga murojaat qilish orqali chaqirilganda, mos metod amalga oshiriladi (ota yoki voris sinfdan).
@Overridekalit so'zi: Ba'zi tillarda (masalan, Java)@Overrideannotatsiyasi ishlatiladi. Bu to'g'ri ishlash uchun majburiy emas, ammo kodni o'qish uchun yaxshilash va metod qayd qoidalariga mos kelmaslik xatolarini oldini olish uchun tavsiya etiladi.- Ota metodga kirish: Voris sinfda qayta yozilgan metod ichida, odatda, shu metodning ota sinfdan bo'lgan amalga oshirilishini chaqirish kerak. Buning uchun
superkalit so'zi ishlatiladi (masalan,super.metod()).
Java misoli:
// Ota sinf
class Animal {
// Ota sinfdagi metod
void makeSound() {
System.out.println("Hayvon tovush chiqaradi");
}
}
// Animal'dan voris olgan sinf
class Dog extends Animal {
// makeSound() metodini qayta yozish
@Override
void makeSound() {
System.out.println("Hov hov!");
}
// Ota metodni chaqirish misoli
void eat() {
System.out.println("It yeyayapti.");
super.makeSound(); // Ota sinfdan metodni chaqirish
}
}
class Main {
public static void main(String[] args) {
Animal myAnimal = new Animal();
Animal myDog = new Dog(); // Polimorfizm
myAnimal.makeSound(); // Chiqish: Hayvon tovush chiqaradi
myDog.makeSound(); // Chiqish: Hov hov! (Qayta yozilgan metod chaqiriladi)
Dog specificDog = new Dog();
specificDog.eat(); // Chiqish: It yeyayapti.
// Hayvon tovush chiqaradi
}
}
Python misoli:
# Ota sinf
class Animal:
# Ota sinfdagi metod
def make_sound(self):
print("Hayvon tovush chiqaradi")
# Animal'dan voris olgan sinf
class Dog(Animal):
# make_sound() metodini qayta yozish
def make_sound(self):
print("Hov hov!")
# Ota metodni chaqirish misoli
def eat(self):
print("It yeyayapti.")
super().make_sound() # Ota sinfdan metodni chaqirish
# Namoyish
my_animal = Animal()
my_dog = Dog() # Polimorfizm
my_animal.make_sound() # Chiqish: Hayvon tovush chiqaradi
my_dog.make_sound() # Chiqish: Hov hov!
specific_dog = Dog()
specific_dog.eat() # Chiqish: It yeyayapti.
# Hayvon tovush chiqaradi
Qayta yozish, asosiy sinfning xulq-atvorini voris sinfning xususiyatlariga moslashtirish uchun ishlatiladi va umumiy interfeysni saqlab qoladi. Bu ob'ektga yo'naltirilgan dizaynning muhim elementidir.