Sobes.tech
Middle

Qachon metodani qayta yozish (Overriding) yuz beradi?

sobes.tech AI

AIdan javob

Obyektga yo'naltirilgan dasturlashda metodani qayta yozish (Overriding) shart-sharoitlar bilan amalga oshiriladi, bunda voris sinf ota sinf bilan bir xil nom, parametrlar ro'yxati (imzo) va qaytish turi bo'lgan metodga ega bo'ladi. Bu voris sinfga meros qilib olingan metodning o'ziga xos amalga oshirishini taqdim etishga imkon beradi.

Qayta yozish uchun asosiy shartlar:

  • Merosi: Voris sinf ota sinfdan meros olishi kerak.
  • Metod imzosi: Voris sinfda qayta yoziladigan metod, ota sinfdagi metod bilan bir xil imzoga (metod nomi va parametr turlari ro'yxati, ularning tartibi va soni) ega bo'lishi kerak. Ba'zi tillarda (masalan, Java) qaytish turi ham mos kelishi yoki kovariant bo'lishi talab qilinadi.
  • Kirish modifikatori: Voris sinfda qayta yoziladigan metodning kirish modifikatori, ota sinfdagi metodnikidan ko'proq cheklovchi bo'lishi mumkin emas.
  • Qayta yozib bo'lmaydiganlar: Statik (static), final (final Java'da, sealed C#da) va private (private) metodlar polimorfizmda ishtirok etmaydi.

Java misoli:

// Ota sinf
class Animal {
    public void sound() {
        // Standart amalga oshirish
        System.out.println("Hayvon tovush chiqaradi");
    }
}

// Voris sinf, sound() metodini qayta yozadigan
class Dog extends Animal {
    @Override // Kompilyator tekshiruvi uchun annotatsiya
    public void sound() {
        // Dog uchun maxsus amalga oshirish
        System.out.println("It baqiradi");
    }
}

class Main {
    public static void main(String[] args) {
        Animal meningHayvoni = new Animal();
        Animal meningItim = new Dog(); // Polimorfizm
        Dog meningIt = new Dog();

        meningHayvoni.sound();      // Animal'dan sound() chaqiradi
        meningItim.sound();         // Dog'dan qayta yozilgan sound() chaqiradi (polimorfizm tufayli)
        meningIt.sound();           // Dog'dan qayta yozilgan sound() chaqiradi
    }
}

Python misoli:

# Ota sinf
class Animal:
    def sound(self):
        # Standart amalga oshirish
        print("Hayvon tovush chiqaradi")

# Voris sinf, sound() metodini qayta yozadigan
class Dog(Animal):
    def sound(self):
        # Maxsus amalga oshirish
        print("It baqiradi")

# Foydalanish
meningHayvoni = Animal()
meningItim = Dog() # Polimorfizm
meningIt = Dog()

meningHayvoni.sound()       # Animal'dan sound() chaqiradi
meningItim.sound()          # Dog'dan qayta yozilgan sound() chaqiradi (polimorfizm tufayli)
meningIt.sound()             # Dog'dan qayta yozilgan sound() chaqiradi

Qayta yozish, ish vaqtida polimorfizmni amalga oshirish uchun ishlatiladi, bu esa ob'ektning haqiqiy turiga qarab turli harakatlarni bajarishga imkon beradi, ota sinfga murojaat qilishga qaramay. Bu, moslashuvchan va kengaytiriladigan tizimlar yaratish uchun ob'ektga yo'naltirilgan dasturlashning asosiy tamoyilidir.