Darsliklar Java Polimorfizm(Sinf/Class)

Java Java Polimorfizm(Sinf/Class)

Polimorfizm — OOP ning uchinchi ustuni. So’zning ma’nosi “ko’p shakllilik”: bitta interfeys yoki metod nomi turli obyektlarda turlicha xatti-harakat qiladi. Bu OOP ning eng nafis imkoniyati — u bir xil kod bilan turli obyektlarni boshqarish imkonini beradi.

Polimorfizmbir interfeys (metod nomi) orqali turli sinf obyektlarining o’ziga xos xatti-harakatini chaqirish qobiliyati. Java’da u meros va metod override orqali tabiiy ishlaydi.

Ota sinf ko’rsatkichi orqali

Polimorfizmning asosi: ota sinf turidagi o’zgaruvchi bola sinf obyektini saqlashi mumkin. Metod chaqirilganda esa obyektning haqiqiy turiga mos versiya ishlaydi:

class Hayvon {
    void ovoz() {
        System.out.println("Noma'lum ovoz");
    }
}

class Mushuk extends Hayvon {
    @Override
    void ovoz() {
        System.out.println("Miyov");
    }
}

class It extends Hayvon {
    @Override
    void ovoz() {
        System.out.println("Vov");
    }
}

public class Main {
    public static void main(String[] args) {
        Hayvon a = new Mushuk();   // ota turi, bola obyekti
        Hayvon b = new It();
        a.ovoz();
        b.ovoz();
    }
}
Miyov
Vov

a va bHayvon turida e’lon qilingan, ammo har biri o’z haqiqiy turiga (Mushuk, It) mos ovoz chiqardi. Java obyektning haqiqiy turini ish vaqtida aniqlaydi.

To’plamda polimorfizm

Polimorfizmning butun kuchi to’plam bilan birlashganda namoyon bo’ladi. Turli obyektlarni bitta ro’yxatda saqlab, bir xil kod bilan boshqaramiz:

import java.util.ArrayList;

class Hayvon {
    void ovoz() { System.out.println("..."); }
}
class Mushuk extends Hayvon {
    @Override void ovoz() { System.out.println("Miyov"); }
}
class It extends Hayvon {
    @Override void ovoz() { System.out.println("Vov"); }
}

public class Main {
    public static void main(String[] args) {
        ArrayList<Hayvon> hayvonlar = new ArrayList<>();
        hayvonlar.add(new Mushuk());
        hayvonlar.add(new It());
        for (Hayvon h : hayvonlar) {
            h.ovoz();   // har biri o'z ovozini chiqaradi
        }
    }
}
Miyov
Vov

Bir xil h.ovoz() chaqiruvi har bir obyektda uning turiga mos ishladi. Yangi tur qo’shsangiz — masalan, Ot — sikl kodini umuman o’zgartirmaysiz.

Statik va dinamik bog’lanish

Polimorfizm ikki tushunchani ajratadi. Ularni jadvalda ko’ramiz:

Tushuncha Qachon hal qilinadi Misol
Statik (overloading) kompilyatsiya vaqtida bir nomli, turli parametrli metod
Dinamik (override) ish vaqtida ota tur, bola obyekti

Yuqoridagi misollar — dinamik polimorfizm: to’g’ri metod obyekt turiga qarab ish vaqtida tanlanadi.

Nega polimorfizm kuchli?

Polimorfizm tufayli siz umumiy interfeys (Hayvon) bilan ishlaysiz, aniq turlar esa har biri o’zicha javob beradi. Bu kengaytiriladigan, moslashuvchan tizimlar qurishning kalitidir — yangi tur qo’shish mavjud kodni buzmaydi.

Xulosa

Bu bo’limda polimorfizmni, ota sinf turi orqali bola obyektini boshqarishni, to’plamda polimorfizmni va statik/dinamik bog’lanish farqini ko’rib chiqdik. Enkapsulatsiya, meros va polimorfizm bilan OOP ning uch asosiy ustunini o’zlashtirdik. Keyingi darsda xatoliklar (Exceptions) ga o’tamiz.