
مفهوم overriding في Dart
نحن نعلم أنه يمكننا الوصول إلى methods الموجودة في الطبقة الفائقة من الكلاسات الابن من خلال استخدام الكلمة الأساسية super أو ببساطة عن طريق إنشاء كائنات من الكلاس الابن.
و على الرغم من ذلك قد تكون هناك مناسبات مختلفة عندما نريد أن يقوم كائن الابن بعمل الأشياء بشكل مختلف عن نفس الطريقة عند الاستدعاء باستخدام كائنات الابن يمكننا تحقيق ذلك من خلال تحديد نفس methods مرة أخرى في الابن بنفس الاسم ونفس الوسائط ونفس نوع الإرجاع كما هو الحال في نفس methods الموجودة داخل الابن.
عندما نستدعي الـ methods سيتم استدعاء methods الموجودة في الابن وتنفيذها بدلاً من methods المحددة في الابن و تُعرف هذه العملية التي حددنا فيها methods بنفس الاسم ونفس الوسيطة ونفس نوع الإرجاع في الابن الموجودة بالفعل في الطبقة الفائقة باسم تجاوز الطريقة overriding.
قواعد دالة Overriding
- الطريقة التي نريد تجاوزها يمكن كتابتها فقط في الابن وليس في نفس الكلاس.
- يجب أن يكون نوع الإرجاع مطابقا لـ method الموجودة في الطبقة العليا.
- يجب أن تكون قائمة argument هي نفسها الموجودة في method الموجودة في الطبقة العليا.
- لا يمكننا تجاوز method إذا تم إعلانها ثابتة أو نهائية.
- إذا لم نرث method فلا يمكننا تجاوزها.
مثال
class ParentClass { void displayName(){ print("Inside the Parent class Method"); } } class ChildClass extends ParentClass { void displayName(){ print("Inside the Child class Method"); } } void main(){ ParentClass pClassObject = new ParentClass(); ChildClass cClassObject = new ChildClass(); pClassObject.displayName(); cClassObject.displayName(); }
في المثال أعلاه لدينا كلاسين و هما ParentClass و ChildClass و الكلاس ParentClass هو كلاس superclass و ChildClass هو الكلاس الفرعي الذي يرث superclass
وقد أعلنا عنه باسم displayName في كل الكلاسات و داخل الدالة الرئيسية و عند تشغيل الكود ستكون نتيجة
Inside the Parent class Method Inside the Child class Method