Polymorphism Kya Hota Hai?
"Poly" means many + "morph" means forms
→ Polymorphism = ek action, lekin multiple ways mein perform karna.
Java mein do types ke polymorphism hote hain:
Compile-time: PolymorphismMethod OverloadingRuntime PolymorphismMethod Overriding
1. Method Overloading (Compile-Time Polymorphism)
Definition:
Jab ek class ke andar same method name ho, lekin different parameters hoon – usse kehte hain method overloading.
Example:
class Calculator {
int add(int a, int b) {
return a + b;
}
double add(double a, double b) {
return a + b;
}
}
class Main {
public static void main(String[] args) {
Calculator c = new Calculator();
System.out.println(c.add(2, 3)); // 5
System.out.println(c.add(2.5, 3.5)); // 6.0
}
}
Key Points:
- Same method name
- Different parameter type, order, or number
- Return type se overloading nahi hota (only parameter change matters)
- Compile time pe decide hota hai kaunsa method chalega
2. Method Overriding (Runtime Polymorphism)
Definition:
Jab child class parent class ke method ko same name, return type, and parameters ke saath dubara define karti hai, usse kehte hain method overriding.
Example:
class Animal {
void sound() {
System.out.println("Animal makes sound");
}
}
class Dog extends Animal {
void sound() {
System.out.println("Dog barks");
}
}
class Main {
public static void main(String[] args) {
Animal a = new Dog(); // reference Animal, object Dog
a.sound(); // Output: Dog barks
}
}
Key Points:
- Parent-child relation hona chahiye (Inheritance)
- Same method signature
- Runtime pe decide hota hai kaunsa method chalega (dynamic dispatch)
Difference Table – Overloading vs Overriding
1. Type:
- Method overloading is an example of compile-time polymorphism, kyunki compiler hi decide karta hai kaunsa method chalega.
- Method overriding is runtime polymorphism, kyunki method call run time pe resolve hota hai.
2. Class:
- Overloading same class ke andar hoti hai.
- Overriding mein parent-child relationship zaruri hota hai (inheritance).
3. Method Signature:
- Overloading mein method signature (parameters) different hoti hai.
- Overriding mein method signature same honi chahiye.
4. Return Type:
- Overloading mein return type change ho sakta hai, lekin sirf return type change karke overloading nahi hoti.
- Overriding mein return type same ya covariant (child class ka type) hona chahiye.
5. Access Modifier:
- Overloading mein access modifier koi restriction nahi hoti.
- Overriding mein child class ka method parent se zyada restrictive nahi ho sakta.
6. @Override Annotation:
- Overloading mein
@Override
use nahi hota. - Overriding mein
@Override
use karna best practice hai – ye compiler ko batata hai ki method override ho raha hai
Real Life Example:
Method Overloading:
- ATM machine → withdraw(int amount), withdraw(int amount, String mode)
Method Overriding:
- Animal → sound()
- Dog → sound() → Dog barks
- Cat → sound() → Cat meows
Summary:
- Overloading = same name, different parameters.
- Overriding = same name, same parameters, but different class.
- Overloading helps in functionality expansion, overriding helps in specific behavior definition.
Comments