ما هو تعدّد الأشكال؟
نفس الواجهة، سلوك مختلف حسب النوع الفعلي — "أشكال متعدّدة".
التجاوز (Overriding)
صنف وارث يعيد تعريف دالة من الأب:
public class Animal {
void sound() { System.out.println("صوت"); }
}
public class Cat extends Animal {
@Override
void sound() { System.out.println("مواء"); }
}
public class Dog extends Animal {
@Override
void sound() { System.out.println("نباح"); }
}
الربط الديناميكي
Animal[] animals = { new Cat(), new Dog() };
for (Animal a : animals) {
a.sound(); // مواء ثم نباح — حسب النوع الفعلي
}
💡
@Overrideتأكيد للمترجم أنك تتجاوز دالة موجودة فعلًا — يكشف الأخطاء الإملائية.
التحميل (Overloading)
نفس اسم الدالة بمعاملات مختلفة داخل صنف واحد:
int add(int a, int b) { return a + b; }
double add(double a, double b) { return a + b; }
int add(int a, int b, int c) { return a + b + c; }
الفرق
| النوع | متى |
|---|---|
| Overriding | بين أب وابن، نفس التوقيع |
| Overloading | داخل صنف، نفس الاسم بمعاملات مختلفة |
🎯 التالي: التجريد والواجهات.