MODUL 2 LESSON 4

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:

  1. Static Polymorphism (ya’ni Compile-time)
  2. 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:

  1. Method nomi bir xil bo‘lishi kerak.
  2. Parametrlar soni yoki ularning turlari farq qilishi kerak.
  3. 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:

  1. Method nomi, parametrlar soni va tartibi xuddi bir xil bo‘lishi kerak.
  2. Return type:
  3. Primitiv turlarda — aynan o‘sha tur bo‘lishi kerak.
  4. Classlarda — covariant return type bo‘lishi mumkin (ya'ni return type subclass bo‘lishi mumkin).
  5. Access modifier:
  6. Child classda kamroq restrictive bo‘lishi kerak (masalan, protectedni publicga aylantirish mumkin, lekin aksincha emas).
  7. private, static, va final methodlar override qilinmaydi.
  8. 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.

  • static methodlar 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.

  • final methodlar 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.

  • private methodlar faqat o‘z classi ichida ko‘rinadi.
  • Subclass undan meros olmaydi, shuning uchun override ham qilib bo‘lmaydi.
  • Agar subclassda ayni nomli private method 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.

Report Page