Java Polimorfizm(Sinf/Class)

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:

  1. Turli classlar obyektlarini bitta umumiy class obyekti sifatida ko’rishi natijasida, koddan qayta-qayta foydalanish imkoniyatini yaratadi.
  2. Metod-overloading va method-overriding natijasida kodni qisqa va o’qishga qulay shaklda yozish imkonini beradi.
  3. Ko’plab obyektlar uchun umumiy class mavjudligi turli turdagi obyektlarni qayta ishlaydigan umumiy kodlar yozish mumkin.

Polimorfizmning kamchiliklari:

  1. Katta va murakkab dasturlarda obyekt xususiyatini tushunish qiyinchilik tug’dirishi mumkin.
  2. Runtimeda qo’shimcha hisoblashlar sabab kod samaradorligini tushurib yuborish ehtimoli bor.