MODUL 2 LESSON 4
Asrorbek🔷 Polymorphism nima?
Polymorphism — bu "bir necha shaklda ishlash qobiliyati" degani.
Java'da bu degani: bir xil nomdagi methodlar har xil vazifani bajara oladi.
🔹 Polymorphismning turlari:
- Static Polymorphism (ya’ni Compile-time)
- Dynamic Polymorphism (ya’ni Runtime)
🔸 1. Static Polymorphism nima?
- Compile vaqtida aniqlanadi.
- Method overloading orqali amalga oshiriladi.
- Ya’ni, bir classda bir nechta methodlar bir nomda, lekin turli parametrlar bilan bo‘ladi.
🧩 Misol:
class Math {
int add(int a, int b) { return a + b; }
double add(double a, double b) { return a + b; }
}
🔸 2. Dynamic Polymorphism nima?
- Run-time da aniqlanadi.
- Method overriding orqali amalga oshadi.
- Ya’ni, subclass
superclassdagi methodni o‘ziga xos holatda qayta yozadi.
🧩 Misol:
class Animal {
void sound() { System.out.println("Animal sound"); }
}
class Dog extends Animal {
void sound() { System.out.println("Woof"); }
}
🔸 Polymorphism va Inheritance farqi:
PolymorphismInheritanceBir method turli holatda ishlaydiBitta class boshqa classdan meros oladiOverloading/Overriding asosidaSuperclass va Subclass orqaliMethodlar fokusdaClasslar orasidagi bog‘liqlik
✅ Polymorphismning foydalari:
- Code readability oshadi.
- Extensibility – yangi funksiyalar oson qo‘shiladi.
- Maintenance soddalashadi.
- Reusability kuchayadi.
- Interface va abstraction bilan yaxshi integratsiyalashadi.
🔷 Overloading nima?
Method Overloading — bu bir class ichida bir xil nomli, lekin turli parametrlar bilan yaratilgan bir nechta methodlarga aytiladi.
➡️ Bu compile-time polymorphism hisoblanadi.
🔸 Overload methodning qoidalari:
- Method nomi bir xil bo‘lishi kerak.
- Parametrlar soni yoki ularning turlari farq qilishi kerak.
- Return type farqli bo‘lsa-yu, parametrlar bir xil bo‘lsa — overload hisoblanmaydi.
🧩 Misol:
class MathUtil {
int sum(int a, int b) { return a + b; }
double sum(double a, double b) { return a + b; }
int sum(int a, int b, int c) { return a + b + c; }
}
🔹 Static methodlarni overload qilolamizmi?
✅ Ha, static methodlar overload qilinishi mumkin, chunki bu faqat method imzosi (signature) ga bog‘liq.
🧩 Misol:
class Test {
static void greet() {
System.out.println("Hi!");
}
static void greet(String name) {
System.out.println("Hi, " + name);
}
}
🔹 Bir xil signature va har xil return type bo‘lgan methodlar yaratish mumkinmi?
❌ Yo‘q, mumkin emas.
Java-da method signature faqat method nomi va parametrlaridan iborat. Return type signaturega kirmaydi.
Agar nom va parametrlar bir xil, lekin return type farqli bo‘lsa — compile error bo‘ladi.
🔹 Overloading Dynamic Bindingga misol bo‘la oladimi?
❌ Yo‘q, bo‘la olmaydi.
Overloading — bu compile-time (static) polymorphism.
Java bu methodlardan qaysi biri chaqirilishini kompilyatsiya vaqtida aniqlaydi.
🆚 Dynamic Binding esa — faqat overriding (ya'ni run-time polymorphism) uchun ishlaydi.
🔷 Overriding nima?
Method Overriding — bu subclass (ya’ni child class) da, superclassdagi methodni xuddi o‘sha nom, parameter va signature bilan qayta yozish jarayonidir.
➡️ Bu Run-time (Dynamic) Polymorphism hisoblanadi.
🔸 Override methodining qoidalari:
- Method nomi, parametrlar soni va tartibi xuddi bir xil bo‘lishi kerak.
- Return type:
- Primitiv turlarda — aynan o‘sha tur bo‘lishi kerak.
- Classlarda — covariant return type bo‘lishi mumkin (ya'ni return type subclass bo‘lishi mumkin).
- Access modifier:
- Child classda kamroq restrictive bo‘lishi kerak (masalan,
protectednipublicga aylantirish mumkin, lekin aksincha emas). private,static, vafinalmethodlar override qilinmaydi.- Overridingda checked exceptionlar kamaytirilishi yoki olib tashlanishi kerak.
🔹 Override qilingan methodning signatureini o‘zgartira olamizmi?
❌ Yo‘q, mumkin emas.
Agar method nomi bir xil bo‘lib, lekin parametrlar o‘zgarsa — bu overriding emas, overloading bo‘ladi.
🔹 Class fieldlari (o‘zgaruvchilar) override bo‘ladimi?
❌ Yo‘q.
Java’da fieldlar (variables) override qilinmaydi, faqat methodlar override qilinadi.
- Fieldlar faqat shadowing qilinadi, ya’ni subclassda yangisi yashiradi, lekin polymorphism ishlamaydi.
🧩 Misol:
class A {
int x = 5;
}
class B extends A {
int x = 10;
}
A obj = new B();
System.out.println(obj.x); // 5 chiqadi, chunki field override bo‘lmaydi
🔷 Binding nima?
Binding — bu method chaqirilganda u methodga qaysi classdagi versiya bog‘lanishini aniqlash jarayoni.
🔹 Static Binding nima?
➡️ Compile time da amalga oshadigan binding.
➡️ Bu overloaded methodlar yoki private, static, final methodlar uchun ishlatiladi.
🔹 Dynamic Binding nima?
➡️ Run time da amalga oshadigan binding.
➡️ Bu overrided methodlar uchun ishlatiladi.
➡️ JVM real object turiga qarab methodni aniqlaydi.
🧩 Misol:
class A {
void show() { System.out.println("A"); }
}
class B extends A {
void show() { System.out.println("B"); }
}
A obj = new B();
obj.show(); // "B" chiqadi — Dynamic Binding
🔹 1. Static methodlarni override qila olamizmi?
❌ Yo‘q, override qilib bo‘lmaydi.
staticmethodlar classga tegishli bo‘lib, ular compile time da resolve qilinadi (static binding).- Agar subclassda xuddi shunday nomdagi static method yozilsa, bu method hiding deb ataladi, override emas.
🧩 Misol:
class Parent {
static void greet() {
System.out.println("Hello from Parent");
}
}
class Child extends Parent {
static void greet() {
System.out.println("Hello from Child");
}
}
Chaqarish:
Parent.greet(); // "Hello from Parent" Child.greet(); // "Hello from Child"
🔹 2. Final methodlarni override qila olamizmi?
❌ Yo‘q, override qilib bo‘lmaydi.
finalmethodlar o‘zgartirilmasin degani.- Agar final methodni override qilishga harakat qilsangiz, compile-time error bo‘ladi.
🔹 3. Private methodlarni override qila olamizmi?
❌ Yo‘q, override qilib bo‘lmaydi.
privatemethodlar faqat o‘z classi ichida ko‘rinadi.- Subclass undan meros olmaydi, shuning uchun override ham qilib bo‘lmaydi.
- Agar subclassda ayni nomli
privatemethod yozsangiz, bu yangi method, aloqasi yo‘q oldingisi bilan.
🔹 4. Protected bo‘lgan methodni override qilib, boshqa access modifier bilan e'lon qila olamizmi?
✅ Ha, lekin faqatgina kengroq (less restrictive) access modifier bilan.

❌ protected methodni private yoki default (package-private) bilan override qilib bo‘lmaydi.