"إذا أراد العامل أن يؤدي عمله بشكل جيد، فعليه أولاً أن يشحذ أدواته." - كونفوشيوس، "مختارات كونفوشيوس. لو لينجونج"
الصفحة الأمامية > برمجة > هل يجب عليك دائمًا استخدام `super()` في المُنشئين؟

هل يجب عليك دائمًا استخدام `super()` في المُنشئين؟

تم النشر بتاريخ 2024-11-25
تصفح:156

Should You Always Use `super()` in Constructors?

هل وجود super() في المنشئين اختياري؟

في البرمجة الموجهة للكائنات، من الشائع استخدام المنشئات في الفئات المشتقة لاستدعاء المنشئين في فئاتهم الفائقة. ومع ذلك، يتساءل بعض المطورين عن ضرورة تحديد super() بشكل صريح داخل المنشئات.

الاستدعاء التلقائي للمترجم لـ super()

يقوم مترجم Java تلقائيًا بإدراج استدعاء إلى مُنشئ no-args يمكن الوصول إليه للفئة الفائقة إذا لم يحدد مُنشئ الفئة الفرعية مُنشئ الطبقة الفائقة. وهذا يعني أنه في معظم الحالات، لا يؤثر إغفال super() على سلوك البرنامج.

استثناءات للقاعدة

ومع ذلك، هناك حالات حيث يكون الاستدعاء الصريح لـ super() مطلوبًا:

    إذا لم يكن لدى الفئة الفائقة مُنشئ بدون وسائط يمكن الوصول إليه.
  • إذا كانت الفئة الفرعية يحتوي المُنشئ على وسائط، والفئة الفائقة لديها مُنشئ يقبل الوسائط.
  • إذا كان مُنشئ الفئة الفرعية يحتاج إلى استدعاء مُنشئ محدد في الفئة الفائقة بخلاف مُنشئ no-args الافتراضي.

استخدام المُنشئ في وجود الوسيطات

عندما يكون لدى مُنشئ الفئة الفرعية وسيطات، فهي مسؤولية الفئة الفرعية منشئ لتمرير الوسائط المناسبة إلى منشئ الطبقة الفائقة. لن يقوم المترجم تلقائيًا باستدعاء مُنشئ فئة فائقة باستخدام الوسائط ما لم يتم تحديد ذلك بشكل صريح.

مثال

خذ بعين الاعتبار الكود التالي:

public class Base {
    private Base() {}
}

public class Derived extends Base {
    public Derived(int i) {
        super(); // Call the default no-args constructor of Base
    }
}
في هذا المثال، يعد استدعاء super() في المنشئ المشتق ضروريًا لأن Base يحتوي على مُنشئ خاص بدون وسيطات.

أحدث البرنامج التعليمي أكثر>

تنصل: جميع الموارد المقدمة هي جزئيًا من الإنترنت. إذا كان هناك أي انتهاك لحقوق الطبع والنشر الخاصة بك أو الحقوق والمصالح الأخرى، فيرجى توضيح الأسباب التفصيلية وتقديم دليل على حقوق الطبع والنشر أو الحقوق والمصالح ثم إرسالها إلى البريد الإلكتروني: [email protected]. سوف نتعامل مع الأمر لك في أقرب وقت ممكن.

Copyright© 2022 湘ICP备2022001581号-3