شرح للOverloading بالجافا مع أمثلة توضيحية

Ammar AlTahhanمنذ 7 سنوات

السلام عليكم ورحمة الله وبركاته،

هذا الدرس البسيط سيشرح باذن الله مفهوم الOverloading وطريقة تطبيقه على لغة الJava 

ماهو الOverloading؟

هي ميزة تقدمها العديد من لغات البرمجة، تتيح للمبرمج كتابة اثنين او اكثر من الmethods المتكررة (تحمل نفس الاسم) ولكن تختلف بخصائصها.

 

كيف نفرق بين هذه الmethods المتشابهة؟

صحيح ان الOverloaded methods تتشابه في الاسم، ولكنها يجب أن تختلف في أحد أو كل ما يلي:

  • عدد الParameters 
  • نوع الParameters
  • ترتيب الParameters

 

أمثلة للMethod overloading:

كما ذكرنا بالأعلى، فإن الOverloaded methods يجب ان تختلف في الArgument list

وسنرى الآن مثال لكل حالة ممكنة للOverloading.

مثال 1: اختلاف عدد الParameters


class DisplayOverloading
{
    public void disp(char c)
    {
         System.out.println(c);
    }
    public void disp(char c, int num)  
    {
         System.out.println(c + " "+num);
    }
}
class Sample
{
   public static void main(String args[])
   {
       DisplayOverloading obj = new DisplayOverloading();
       obj.disp('a');
       obj.disp('a',10);
   }
}

Output:


a
a 10

في المثال السابق، قمنا بكتابة الميثود ()disp مرتين، مرة باستخدام Parameter واحد ومرة باستخدام اثنين.

نلاحظ ان الcompiler ذكي كفاية ليربط لنا كل استدعاء بالميثود المناسبة له حسب الArgument list المستخدمة.

 

مثال 2: اختلاف نوع الParameters


class DisplayOverloading2
{
    public void disp(char c)
    {
        System.out.println(c);
    }
    public void disp(int c)
    {
       System.out.println(c );
    }
}

class Sample2
{
    public static void main(String args[])
    {
        DisplayOverloading2 obj = new DisplayOverloading2();
        obj.disp('a');
        obj.disp(5);
    }
}

Output:


a
5

كما المثال السابق، نلاحظ هنا ان الميثود ()disp كتبت مرتين، مرة مع Parameter من نوع char ومرة من نوع int.

 

مثال 3: اختلاف ترتيب الParameters

في هذا المثال، قمنا بتغيير ترتيب الParameters لكتابة اكثر من نسخة من الميثود ()disp، في المرة الأولى كانت تحتوي على (char, int) وفي الثانية اصبحت (int, char).


class DisplayOverloading3
{
   public void disp(char c, int num)
   {
       System.out.println("I’m the first definition of method disp");
   }
   public void disp(int num, char c)
   {
       System.out.println("I’m the second definition of method disp" );
   }
}
class Sample3
{
   public static void main(String args[])
   {
       DisplayOverloading3 obj = new DisplayOverloading3();
       obj.disp('x', 51 );
       obj.disp(52, 'y');
   }
}

Output:


Im the first definition of method disp
Im the second definition of method disp

 

 

لنرى امثلة على طرق overload خاطئة:

الحالة 1:


int mymethod(int a, int b, float c)
int mymethod(int var1, int var2, float var3)

النتيجة: خطأ في الCompilation، كلا الميثودين يحملان نفس عدد ونوع وترتيب الParameters.

 

الحالة 2:


int mymethod(int a, int b)
float mymethod(int var1, int var2)

النتيجة: خطأ في الCompilation، اختلاف الreturn type للميثودين لا يهم في الoverloading.

 

هنا نصل الى نهاية موضوعنا، أتمنى لي ولكم التوفيق والسداد.

كلمات دليلية:
0
إعجاب
8136
مشاهدات
0
مشاركة
1
متابع
متميز
محتوى رهيب

التعليقات (0)

لايوجد لديك حساب في عالم البرمجة؟

تحب تنضم لعالم البرمجة؟ وتنشئ عالمك الخاص، تنشر المقالات، الدورات، تشارك المبرمجين وتساعد الآخرين، اشترك الآن بخطوات يسيرة !