اذهب إلى المحتوى
  • 0

overload لل constructors في الجافا

أحمد ريحان

السؤال

Recommended Posts

  • 1

نعم يمكن ذلك في لغة JAVA حيث سيتم عمل عدة دوال بانية constructor وكل منها يستقبل وسطاء parameters مختلفة

وسينتج عنهم كائنات تم تهيئتا بطرق مختلفة، مثلا ليكن لدينا صندوق Box له 3 أبعاد عرض-ارتفاع-عمق وسنقوم بعمل 3 دوال بانية مختلفة له:

// صنف الصندوق
class Box
{
	// خصائصه
    double width, height, depth;
  
    // الباني الذي يسند قيم لجميع الخاصيات
    Box(double w, double h, double d)
    {
        width = w;
        height = h;
        depth = d;
    }
  
    // باني  بدون وسطاء يسند القيمة 0 لكل الخواص
    Box()
    {
        width = height = depth = 0;
    }
  
    // باني يستقبل وسيط واحد و يسند جميع القيم له
    Box(double len)
    {
        width = height = depth = len;
    }

  	// حساب الحجم
    double volume()
    {
        return width * height * depth;
    }

}

لتجريب الصنف السابق يمكن استخدام الصنف المساعد التالي:

public class Test
{
    public static void main(String args[])
    {
        // تعريف عدة صناديق باستخدم دال البناء المختلفة
        Box mybox1 = new Box(10, 20, 15);
        Box mybox2 = new Box();
        Box mycube = new Box(7);
  
        double vol;  // متغيرلتخزين الحجم
  
        // أول صندوق
        vol = mybox1.volume();
        System.out.println(" Volume of mybox1 is " + vol);
  
        // ثاني صندوق
        vol = mybox2.volume();
        System.out.println(" Volume of mybox2 is " + vol);
  
        // ثالث صندوق
        vol = mycube.volume();
        System.out.println(" Volume of mycube is " + vol);
    }
}

هكذا سيتم بناء 3 أغراض من الصنف الأول لها نفس الخواص ولكن باستعمال overloading للدالة البانية

رابط هذا التعليق
شارك على الشبكات الإجتماعية

  • 1

نعم يمكنك ذلك عن طريق تغيير عدد الوسائط التي يقبلها الباني أو عن طريق تغيير نوع بيانات الوسطاء . لاحظ المثال التالي:
حيث قمنا بعمل overload للباني Ali.  حيث في الاستداعء الأول للباني قمنا باستدعاء الباني ذو الوسيطة الوحيدة (وستتم التهيئة ب 1.1) أما في الاستدعاء الثاني فسيتم تنفيذ الباني ذو الوسيطتين وستتم التهيئة ب 2.5.

class Ali   
{  
    float x;   
    public Ali(float y)  
    {  
        x=y;  
    }  
    public Ali(float y, float m)  
    {  
        System.out.println("Hi");  
        if(y>m)  
        {  
            x=y;   
        }  
        else   
        {  
            x=m;  
        }  
    }  
}  
public class Main   
{  
    public static void main (String args[])   
    {  
        Ali t1 = new Ali(1.1);  
        Ali t2 = new Ali(3, 2.5);  
        System.out.println(t1.x);  
        System.out.println(t2.x);  
    }  
}  

حيث أننا هنا قمنا بتغيير عدد الوسطاء، ويمكنك أيضاً أن تقوم بتغيير نوع البيانات:

class Ali   
{  
    int x=0;   
    public Ali(int y)  
    {  
        x=y;  
    } 
	float z=0.0;
    public Ali(float y)  
    {  
        z=y;  
    } 
    
}  
public class Main   
{  
    public static void main (String args[])   
    {  
        Ali t1 = new Ali(1.1); // سيؤدي إلى استدعاء الباني الثاني  
        Ali t2 = new Ali(3); // سيؤدي إلى استدعاء الباني الأول   
    }  
}  

 

تم التعديل في بواسطة Ali Haidar Ahmad
رابط هذا التعليق
شارك على الشبكات الإجتماعية

انضم إلى النقاش

يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.

زائر
أجب على هذا السؤال...

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   جرى استعادة المحتوى السابق..   امسح المحرر

×   You cannot paste images directly. Upload or insert images from URL.

  • إعلانات

  • تابعنا على



×
×
  • أضف...