التحميل الزائد

لربما لاحظت في الفقرة السابقة أن circleArea وarea تجريان وظيفة مشابهة — حساب مساحة دائرة — لكنهما تأخذان معاملات مختلفة. بالنسبة إلى area، يجب أن نعطيها نصف القطر؛ أما circleArea، فيجب إعطاؤها نقطتين.
إذا قامت عمليتان بنفس الوظيفة فمن الطبيعي أن نعطيهما نفس الاسم. إن وجود أكثر من عملية بنفس الاسم، وهو ما يدعى بالتحميل الزائد (Overloading)، مشروع في Java طالما أن كل نسخة من العملية تأخذ معاملات مختلفة. لذا يمكننا أن نعيد تسمية circleArea:
كود:
public static double area
                (double x1, double y1, double x2, double y2) {
  return area (distance (xc, yc, xp, yp));
}
عندما تستدعي عملية زائدة التحميل(Overloaded method) ، ستعرف Java أي نسخة تريدها أنت بالاعتماد على المتحولات التي تعطيها. إذا كتبت:
كود:
double x = area (3.0);
ستبحث Java عن عملية اسمها area تأخذ متحولاً واحداً من نوع double، وهكذا تستعمل النسخة الأولى، التي تعامل المتحول على أنه نصف القطر. أما إذا كتبت:
كود:
double x = area (1.0, 2.0, 4.0, 6.0);
ستستخدم Java النسخة الثانية من area. لاحظ أيضاً لأن النسخة الثانية من area تستدعي النسخة الأولى عملياً.
العديد من أوامر Java الجاهزة (built-in commands) محمَّلة بشكل زائد، ما يعني وجود نسخ مختلفة تقبل عدداً مختلفاً أو أنواعاً مختلفة من المعاملات. مثلاً، هناك نسخ من print وprintln تقبل معاملاً واحداً من أي نوع. في صنف Math، توجد نسخة من abs تعمل مع الأعداد العشرية، ونسخة أخرى تعمل مع الأعداد الصحيحة.
على الرغم من أن ميزة التحميل الزائد مفيدة، يجب استعمالها بحذر. قد تجد نفسك ضائعاً فعلاً إذا كنت تحاول تنقيح نسخة ما من عملية في حين أنك تستدعي نسخة أخرى بالخطأ.
في الواقع، هذا يذكرني بإحدى القواعد الأساسية في تصحيح الأخطاء: تأكد أن نسخة البرنامج التي تنظر إليها هي نفس نسخة البرنامج قيد التشغيل!
ستجد نفسك في أحد الأيام وأنت تعدل في البرنامج مرة بعد أخرى، وترى نفس النتائج كلما شغلته. هذه علامة تحذير إلى أنك لسبب أو لآخر تشغل نسخة من البرنامج غير التي تعتقد أنك تشغلها. للتحقق، ضع تعليمة print (ليس مهماً ما تطبعه) وتأكد من أن سلوك البرنامج تغيّر وفقاً لذلك.