Polimorfizm - lug’aviy jihatdan “ko’p shakllilik” degan ma’noni anglatadi va u OOP ning asosiy konsepsiyalaridan biri hisoblanadi. Polimorfizm bitta vazifani turli usullar bilan bajarish imkonini beradi. Yoki, bitta interfeys va uning ko’plab implementatsiyalari yozilishi demakdir.
Java dasturlash tilida 2 xil polimorfizm
Kompilyatsiya vaqtidagi polimorfizm - static polimorfizm deb ham ataladi. Metod-overloading ushbu turdagi polimorfizmni amalga oshiradi.
Metod-overloading - bir xil nomdagi ammo turli parametrlarga ega metodlar mavjudligi hisoblanadi. Metodlar parametrlar soni yoki parametrlar ma’lumot turi bilan farq qiladi. Quyidagi misollarga e’tibor bering:
class Helper {
static int kopaytirish(int a, int b)
{
return a * b;
}
static double kopaytirish(double a, double b)
{
return a * b;
}
}
public class Test {
public static void main(String[] args)
{
System.out.println(Helper.kopaytirish(2, 4)); // 8
System.out.println(Helper.kopaytirish(5.5, 6.3)); // 34.65
}
}
Ikkinchi misol:
class Helper {
static int kopaytirish(int a, int b)
{
return a * b;
}
static int kopaytirish(int a, int b, int c)
{
return a * b * c;
}
}
public class Test {
public static void main(String[] args)
{
System.out.println(Helper.kopaytirish(2, 4)); // 8
System.out.println(Helper.kopaytirish(2, 7, 3)); // 42
}
}
Runtime (ish vaqtidagi) polimorfizm - metod-overriding usuli yordamida amalga oshiriladi. Metod overriding shunday mexanizmki, sub-classda super-classdagi biror metodni rad qilish, ya’ni xuddi shu nom va parametrlar bilan yangi metod yoziladi. Natijada, super-classdagi metod override ya’ni ishlatilmaydi. Quyidagi misol yordamida metod overridingni tushunishga harakat qiling.
class Parent {
void print()
{
System.out.println("parent class");
}
}
class Subclass1 extends Parent {
void print() { System.out.println("subclass1"); }
}
class Subclass2 extends Parent {
void print()
{
System.out.println("subclass2");
}
}
public class Test {
public static void main(String[] args)
{
Parent a;
a = new Subclass1();
a.print(); // subclass1
a = new Subclass2();
a.print(); // subclass2
}
}
Virtual funksiyalar - runtime polimorfizmning bir turi bo’lib, sub-classning obyektini super-class obyekti sifatida qarashga imkon beradi. Sub-class o’z implementatsiyasini ta’minlash uchun super-classning virtual funksiyasini “override” qiladi.
Polimorfizmning afzalliklari:
- Turli classlar obyektlarini bitta umumiy class obyekti sifatida ko’rishi natijasida, koddan qayta-qayta foydalanish imkoniyatini yaratadi.
- Metod-overloading va method-overriding natijasida kodni qisqa va o’qishga qulay shaklda yozish imkonini beradi.
- Ko’plab obyektlar uchun umumiy class mavjudligi turli turdagi obyektlarni qayta ishlaydigan umumiy kodlar yozish mumkin.
Polimorfizmning kamchiliklari:
- Katta va murakkab dasturlarda obyekt xususiyatini tushunish qiyinchilik tug’dirishi mumkin.
- Runtimeda qo’shimcha hisoblashlar sabab kod samaradorligini tushurib yuborish ehtimoli bor.