الأربعاء، 17 أكتوبر 2012

المنهج المهيمن في جافا

يتحقق المنهج المهيمن "Method Overriding" عندما تقوم فئة فرعية بإلغى المناهج الغير ثابت المعرفة في الفئة الفائقة، وبعد ذلك تنفيذ المنهج الجديد في الفئة الفرعية التي يُتِم تنفيذها.
تعريف المنهج الجديد يجب ان يكون له نفس توقيع الفئة (أي اسم المنهج والمعلمات "parameters") ، ونوع الإرجاع "return type". ويتم اختيار المعلمات "parameters" و نوع الإرجاع "return type" فقط كمعايير لمطابقة  توقيع الفئة. فإذا كان للفئة الفرعية معلمات المنهج على النحو النهائي "final" فهو لا يهم بالنسبة لسيناريوهات المنهج المهيمن فيبق صحيحا. التعريف الجديدة للمنهج لا يضييق على إمكانية الوصول للمنهج، ولكن من الممكن توسيعها. التعريف الجديد للمنهج فقط تحديد جميع أو لا شيء ، أومجموعة فرعية من الفئات الستثنات (بما في ذلك الفئات الفرعية الخاصة بهم) المحدد في فقرة  "throws" للفئة المهيمنة الموجودة في فئة الفائقة
برنامج لشرح المفاهيم المختلفة للمنهج المهيمن في جافا


Output 

OverridingClass.method1()

SuperClassWithDifferentMethods.method2()
OverridingClass.method5()
OverridingClass.method6()
OverridingClass.method7()
OverridingClass.method8()

oc1.field1 : 30
oc1.field2 : 40
sc3.field1 : 10
sc3.field2 : 20
SuperClassWithDifferentMethods.method5()
SuperClassWithDifferentMethods.method5()
OverridingClass.method1()

تعريفات المنهج الجديد OverridingClass في الفئة الفرعية لها نفس التوقيع و نوع الإرجاع "return type" متل الفئة الفائقة SuperClassWithDifferentMethods . المنهج المهيمن الجديد method6 يحدد مجموعة من الاستثناءات (CustomException). تعريف المنهج المهيمن الجديد method7 يوسع إمكانية وصول الخاص "private" إلى العام "public". و المنهج المهيمن method8 يعلن المعلمة "parameter" على اساس نهائية "final"، وهي ليست جزءا من توقيع المنهج و هذا المنهج المهيمن يعمل جيدا.  المنهج الثابت "static method" لا يمكن تجاوزه ليكون مثيل لمنهج غير ثابتة  كما هو موضح في الإعلان عن المنهج المهيمن للمنهج method9. المنهج الثابتة "static method" هو فئة محددة وليس جزءا من أي كائن، في حين يتم استدعاء المناهج المهيمن بالنيابة عن الكائنات من الفئة الفرعية. لا توجد مثل هذه القيود على الحقول، وبالنسبة للحقول فقط أسماء الحقول هي المطلوبة. و لا يمكن تجاوز المنهج النهائي "final method" ، ومحاولة هذا الأمر سيؤدي إلى خطأ في وقت التحويل البرمجي. فالمنهج الخاص "private method" لا يمكن الوصول إليه من خارج الفئة التي تم تعريفه فيها ، وبالتالي ، لا يمكن للفئة الفرعية تجاوزه.
يجب على الفئة الفرعية استخدام الكلمة الأساسية "super" من أجل استدعاء المنهج الذي تم تجاوزه "overridden method" من الفئة المتفوقة. و لا يمكن لفئة فرعية تجاوز حقول الفئة الفائقة، ولكن يمكنها إخفائهم. يمكن للتعليمات البرمجية في فئة فرعية استخدام الكلمة الأساسية "super" للوصول إلى الأعضاء "members" ، بما في ذلك الحقول المخفية.
ويجب ملاحظة الفرق بين استدعاء المناهج المثيلة "instance methods" في الكائن والوصول إلى حقول كائن. عندما يتم استدعاء منهج مثيل لكائن باستخدام مرجع ، فهي فئة الكائن الحالي و يشار اليها بالمرجع "reference" ، وليس نوع المرجع هو الذي يحدد تطبيقات المنهج  التي سيتم تنفيذها. عندما يكون حقل كائن قد تم الوصول إلىه  باستخدام مرجع، فهو نوع المرجع، وليس فئة الكائن الحالي المرموز له بالمرجع، و يحدد هذا أيّ حقل سيكون قابل للوصول. ويتجلى هذا في البرنامج أعلاه

ليست هناك تعليقات:

إرسال تعليق