Sobes.tech
Middle

Qayta ishlash turlari va polimorfizm nima?

sobes.tech AI

AIdan javob

Meros kalitish, yangi sinf (voris, bolalar sinfi) mavjud sinf (ota-sinif, super sinf) maydonlari va metodlarini meros olish imkonini beradigan mexanizmdir. Bu kodni qayta ishlatishni va sinf hierarhiyasini rivojlantiradi.

Polimorfizm (turlar xilma-xilligi) - ob'ektning bir nechta shaklga ega bo'lish qobiliyatidir. Referens tiplari kontekstida, bu shuni anglatadiki, super sinf o'zgaruvchisi sub sinf ob'ektiga murojaat qilishi mumkin. Bu turli sub sinflardagi ob'ektlarni umumiy interfeys yoki super sinf orqali bir xil tarzda ishlash imkonini beradi.

Polimorfizmning ikki asosiy turi mavjud:

  1. Kompilyatsiya vaqti (statik polimorfizm): odatda metodlar overload qilish (method overloading) orqali erishiladi, bir sinfda bir xil nomli, ammo turli imzolar (parametrlar soni va/t yoki turlari) bilan bir nechta metodlar bo'lsa.
  2. Ijro vaqti (dinamik polimorfizm): metodlarni override qilish (method overriding) orqali erishiladi, sub sinfa o'zining metodni taqdim etadi, bu metod super sinfda oldindan belgilangan. Bu metodni super sinfga murojaat qilish orqali chaqirilganda, sub sinfning implementatsiyasi bajariladi (agar ob'ekt turi sub sinf bo'lsa).

Kiritilgan misol va dinamik polimorfizm:

// Asosiy sinf
class Animal {
    public void makeSound() {
        System.out.println("Umumiy hayvon tovushi");
    }
}

// Voris sinf
class Dog extends Animal {
    @Override // Metodni qayta yozish
    public void makeSound() {
        System.out.println("Gav!");
    }
}

// Voris sinf
class Cat extends Animal {
    @Override // Metodni qayta yozish
    public void makeSound() {
        System.out.println("Miy!");
    }
}

public class Main {
    public static void main(String[] args) {
        // Statik tur Animal, dinamik tur Dog ob'ekti
        Animal myDog = new Dog();
        // Statik tur Animal, dinamik tur Cat ob'ekti
        Animal myCat = new Cat();
        // Statik tur Animal, dinamik tur Animal ob'ekti
        Animal genericAnimal = new Animal();

        // Polimorfizmni ko'rsatish
        myDog.makeSound(); // Dog metodini chaqiradi
        myCat.makeSound(); // Cat metodini chaqiradi
        genericAnimal.makeSound(); // Animal metodini chaqiradi
    }
}

Ushbu misolda, Dog va Cat Animal dan meros oladi. myDog, myCat va genericAnimal o'zgaruvchilari statik turda Animal, ammo turli dinamik turlarga (Dog, Cat, Animal) murojaat qiladilar. makeSound() metodini chaqirishda, har bir murojaat ob'ektning dinamik turiga mos ravishda mos metod bajariladi, bu esa ijro vaqtidagi polimorfizmni tashkil etadi.