Javada polimorfizm
Polimorfizm orqali bir jarayonni turli yo’llar bilan tashkillashtirishimiz mumkin. Polimorfizm so’zi yunoncha ikki so’zning birikmasidan tashkil otpgan «poly» — Ko’p va «morphs» — formalar. Polimorfizm ham ko’p formalar degan ma’noni anglatadi.
Javada polimorfizmni ikki turi mavjud: programma kompilatsiya bo’layotgan vaqtda sodir bo’ladigan polimorfizm (compile time polymorphism, static polymorphism) va programma ishlab turgan vaqtda sodir bo’ladigan polimorfizm (runtime polymorphism, dynamic polymorphism). Javada polimorfizm metodlarni qayta yuklash (overload) va qayta yozish (override) bilan amalga oshiriladi.
Compile time polimorfizm
Agar metodni qayta yuklansa (overload) bu — compile time polimorfizmga misol bo’ladi. Ya’ni, agar class ichida bir xil nomli, ammo argumentlarning soni yoki argumentlarning ma’lumot tipi (yoki ikkalasi) farq qiladigan metodlar mavjud bo’lsa, bu compile time polimorfizm bo’ladi. Quyidagi misolga qarang:
class X { void metodA(int num) { System.out.println ("metodA:" + num); } void metodA(int num1, int num2) { System.out.println ("metodA:" + num1 + "," + num2); } double metodA(double num) { System.out.println("metodA:" + num); return num; } } class Y { public static void main (String args []) { X Obj = new X(); double natija; Obj.metodA(20); Obj.metodA(20, 30); result = Obj.metodA(5.5); System.out.println("Javob:" + natija); } }
Natija:
metodA:20 metodA:20,30 metodA:5.5 Javob:5.5
Yuqoridagi misolda, X classning 3 ta metodi bor. Uchala metodlarning xam nomlari bir xil — metodA, ammo metodlarning argumentlarida farqlar mavjud. Kompilyatsiya vaqtida kompilyator metodga yuborilayotgan argumentlarning soni va ma’lumot tipiga qarab kerakli metodni tanlab oladi. Qaysi metodlarni chaqirish kompilatsiya vaqtida aniqlanishi tufayli ham bu polimorfizm turi Compile time polimorfizm deb nomlanadi.
Compile time polimorfizmni yana Static binding, Early binding deb ham ataladi.
Runtime polimorfizm
Dastlab casting, up-casting va down-casting tushunchalari bilan tanishib olaylik (Aslida, runtime polimorfizmni tushunish un faqat up-casting ni o’zini bilish yetadi, ammo men to’lqiroq yozdim). Obyektni bir toifadan boshqa toifaga o’tkazishgacasting deyiladi.
Agar ota classning obyekti bola class toifasga o’tkazilsa bu down-casting deyiladi. Misol:
Object satrObject = "Bu shunchaki satr"; // Object - ota class String satrString = (String)ObyektSatr; // String - Object classning bola classi
Yuqoridagi misolda Object toifasidagi o’zgravchi (satrObject) String toifasiga o’zgartirilayapti. Bilamizki, Obyekt class barcha classlarning otasi hisoblanadi.
Agar bola classning obyekti ota class toifasga o’tkazilsa bu up-casting deyiladi. Misol:
String satrString = "Bu shunchaki satr"; Object satrObject = (Object)satrString;
Agar ota classning o’zgaruvchisi bola class obyektini ko’rsatsa (xotiradagi adresini ko’rsatsa) ham up-casting deyiladi. Misol:
class A{} class B extends A{}
A a = new B(); //upcasting
Yuqoridagi misolda A class toifasidagi a o’zgaruvchi (reference variable) B bola classning obyektini ko’rsatadi (hotiradagi adresini ko’rsatadi).
Runtime polimorfizmda bola classdagi override qilingan metod, ota class toifasidagi o’zgaruvchi orqali chaqiriladi. Quyidagi misolga qarang:
class Chevrolet{ void run(){System.out.println("running");} } class Malibu extends Chevrolet{ void run(){System.out.println("CHevrolet Malibu");} public static void main(String args[]){ Chevrolet ch = new Malibu();//upcasting ch.run(); } }
Naija:
CHevrolet Malibu
Yuqoridagi misolda biz ikkita class yaratayapmiz. Malibu class Chevrolet class dan nasl olayapti va run() metodni qayta yozayapti (override). Qayta yozilgan run metod ota class toifasidagi o’zgaruvchi ch orqali chaqirilayapti. ch o’zgaruvchi Malibu toifasidagi obyektga ko’rsatayotgani uchun Malibu classda qayta yozilgan metod chaqiriladi.
Manba:
Umumiy Dasturlash
Javada polimorfizm