Sobes.tech
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).
  • @Override kalit so'zi: Ba'zi tillarda (masalan, Java) @Override annotatsiyasi 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 super kalit 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.