كلاهما يعيد استخدام اسم الدالة، لكنهما مختلفان بشكل أساسي. تحميل الدوال = نفس الاسم، معاملات مختلفة، في نفس الفئة، يتم تحديده في . = فئة مشتقة دالة الفئة الأب بـ ، يتم تحديده في .
كلاهما يعيد استخدام اسم الدالة، لكنهما مختلفان بشكل أساسي. تحميل الدوال = نفس الاسم، معاملات مختلفة، في نفس الفئة، يتم تحديده في . = فئة مشتقة دالة الفئة الأب بـ ، يتم تحديده في .
| تحميل الدوال | تجاوز الدوال | |
|---|---|---|
| التوقيع | يجب أن يختلف (المعاملات) | يجب أن يكون متطابقًا |
| العلاقة | نفس الفئة | فئة أب ↔ فئة مشتقة |
| يتم التحديد | وقت الترجمة (static) | وقت التشغيل (dynamic) |
| الغرض | سهولة / متغيرات | تعدد الأشكال |
class Printer {
void print(String s) { System.out.println(s); }
void print(int n) { System.out.println(n); } // same name, diff param
void print(String s, int times) { /* ... */ }
}
يختار المترجم أي print بناءً على أنواع الوسائط — لا يتعلق بالوراثة.
class Animal { String speak() { return "..."; } }
class Dog extends Animal {
@Override
String speak() { return "Woof"; } // replaces Animal.speak()
}
Animal a = new Dog();
a.speak(); // "Woof" — runtime picks Dog's version (dynamic dispatch)
خطأ متكرر هو التحميل الخاطئ عندما كنت تقصد التجاوز (على سبيل المثال خطأ إملائي في التوقيع). استخدم دائمًا @Override (Java) أو override (C#) حتى يكتشفه المترجم.
تجاوز الدوال هو محرك تعدد الأشكال — آلية وقت التشغيل التي تجعل "واجهة واحدة، تطبيقات متعددة" تعمل.
معرفة الفرق تمنع خطأ كلاسيكي: التفكير بأنك استبدلت السلوك عندما في الواقع أنشأت دالة ثانية لن يتم استدعاؤها أبدًا.