المثال التالي هو من أهم أمثلة الـ Overloading لأننا سنبني دوال تعتمد على دوال موجودة قبلها.
الآن لنفترض أننا قمنا بتعريف كلاس إسمه MyMath
يحتوي على ثلاث دوال إسمهم max()
و نوعهم public double
.
- الدالة الأولى تأخذ 2 باراميتر عبارة عن أرقام, و هي تعطينا العدد الأكبر بينهما.
- الدالة الثانية تأخذ 3 باراميترات عبارة عن أرقام, و هي تعطينا العدد الأكبر بينهم.
- الدالة الثالثة تأخذ 4 باراميترات عبارة عن أرقام, و هي تعطينا العدد الأكبر بينهم.
بعد إنشاء هذا الكلاس, قمنا بإنشاء الكلاس Main
و إستدعاء الدوال الثلاثة فيه.
مثال
public class MyMath { // هذه الدالة تعطيها رقمين فترجع لك العدد الأكبر بينهما public double max(double a, double b) { if(a>b) return a; else return b; } // هذه الدالة تعطيها ثلاثة أرقام فترجع لك العدد الأكبر بينهم // و هي تعتمد على الدالة السابقة لمقارنة أول عددين مع العدد الثالث public double max(double a, double b, double c) { if(max(a,b)>c) return max(a,b); else return c; } // هذه الدالة تعطيها ثلاثة أرقام فترجع لك العدد الأكبر بينهم // و هي تعتمد على الدالتين السابقتين لمقارنة أول ثلاث أعداد مع العدد الرابع public double max(double a, double b, double c, double d) { if(max(a,b,c)>d) return max(a,b,c); else return d; } }
public class Main { public static void main(String[] args) { MyMath m = new MyMath(); // لإستدعاء الدوال منه MyMath هنا قمنا بإنشاء كائن من الكلاس System.out.println("The max number is: " +m.max(5, 20)); // هنا سيتم إستدعاء الدالة التي تأخذ 2 باراميتر System.out.println("The max number is: " +m.max(5, 20, 15)); // هنا سيتم إستدعاء الدالة التي تأخذ 3 باراميترات System.out.println("The max number is: " +m.max(5, 20, 15, 30)); // هنا سيتم إستدعاء الدالة التي تأخذ 4 باراميترات } }
سنحصل على النتيجة التالية عند التشغيل.
The max number is: 20.0 The max number is: 20.0 The max number is: 30.0
كما لاحظت هنا, في كل مرة قمنا فيها باستدعاء الدالة max()
وجدنا أن المترجم قام باستدعاء الدالة max()
التي تحتوي على نفس عدد الباراميترات الذي كنا نمرره لها, و داخلياً ربطنا الدوال ببعضها.