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.
Polimorfizm — bir 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 b — Hayvon 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.