Sobes.tech
Junior

Qanday qilib referens tiplardagi meros va polimorfizm?

sobes.tech AI

AIdan javob

Merosxo‘rlik — bu yangi sinf (subsinf/bolalar sinfi) mavjud sinfning (super sinf/ota sinf) xususiyatlari (maydonlar) va xulq-atvorini (metodlar) meros qilib olish imkonini beradigan mexanizm bo‘lib, funksionallikni kengaytirish yoki qayta yozishni ta’minlaydi. Bu kodni qayta ishlatishni rag‘batlantiradi va "bu narsa" (is-a) munosabatlarini o‘rnatadi.

Polimorfizm — bu turli sinflarga tegishli ob’ektlarning, bajarilish vaqtida ularning aniq turiga qarab, bir xil metod nomiga turlicha javob berish imkoniyatidir. Bu kodning moslashuvchanligi va kengaytirilishini ta’minlaydi, subsinflardagi ob’ektlarni super sinfga murojaat qilish orqali ishlash imkonini beradi.

Ushbu ma’lumot turlari (sinflar) uchun bu tushunchalar muhim rol o‘ynaydi:

  • Merosxo‘rlik: Subsinf super sinfning a’zolariga kirish huquqiga ega bo‘lib, o‘zining a’zolarini qo‘shishi yoki meros qilib olingan metodlarning xulq-atvorini o‘zgartirishi mumkin (qayta yozish - overriding). Subsinf ob’ekti har qanday joyda ishlatilishi mumkin, bu yerda super sinf ob’ekti kutilyapti.
  • Polimorfizm: Bir xil merosxo‘rlik hierarhiyasiga tegishli turli ob’ektlar, bir xil kod bilan ishlov berilishi mumkin, bir xil metod chaqiriladi, ammo bu metodning amalga oshirilishi, bajarilish vaqtida ob’ektning aniq turiga mos bo‘ladi.

Java misoli:

// Super sinf (ota sinf)
class Animal {
    public void makeSound() {
        System.out.println("Ovoz chiqaradi");
    }
}

// Subsinf (bolalar sinfi), Animal’dan meros oladi
class Dog extends Animal {
    // Super sinfdan metodni qayta yozish
    @Override
    public void makeSound() {
        System.out.println("Hav!");
    }
}

// Subsinf (bolalar sinfi), Animal’dan meros oladi
class Cat extends Animal {
    // Super sinfdan metodni qayta yozish
    @Override
    public void makeSound() {
        System.out.println("Miy!");
    }
}

// Polimorfizm misoli
public class PolymorphismExample {
    public static void main(String[] args) {
        Animal myAnimal = new Animal(); // super sinf ob’ekti
        Animal myDog = new Dog();       // sub sinf ob’ekti, super sinfga murojaat
        Animal myCat = new Cat();       // sub sinf ob’ekti, super sinfga murojaat

        myAnimal.makeSound(); // Chiqish: Ovoz chiqaradi
        myDog.makeSound();    // Chiqish: Hav! (polimorfizm - Dog metodini chaqirish)
        myCat.makeSound();    // Chiqish: Miy! (polimorfizm - Cat metodini chaqirish)
    }
}