التدابير الرسمية
يمكن استخدام الكلمة الرئيسية "النهائية" التي توفرها لغة Java لأداء هذه المهمة. ألقِ نظرة على مثال رمز المصدر التالي:
نسخة الكود كما يلي:
// FinalDemo.java
الفئة النهائية العامة FinalDemo {
}
دعنا نجعل فئة أخرى أدناه ، والتي سترث الفصل المذكور أعلاه. ستمكّن الكلمة الرئيسية "التي تمتد" التي توفرها لغة Java فئة من الوراثة من فئة موجودة.
نسخة الكود كما يلي:
// FinalDemo2.java
الطبقة العامة FinalDemo2 يمتد FinalDemo {
}
بعد تجميع الفئة الأولى ، إذا قمت بعد ذلك بتجميع الفئة الثانية ، فإن برنامج التحويل البرمجي JDK يبلغ عن خطأ وستحصل على رسالة الخطأ التالية:
FinalDemo2.java:1: لا يمكن أن يرث من النهائي النهائي
يمتد FinalDemo2 من الفئة العامة FinalDemo {}
^
1 خطأ
الآن ، لقد منعت بنجاح الدرجة الأولى من أن تكون ورثها من قبل فئة أخرى من خلال الأساليب الرسمية.
التدابير غير الرسمية
ومع ذلك ، فإن طريقة منع الصفوف من الفصول الدراسية ليست فريدة من نوعها. بالنظر إلى الكود التالي ، أعلن أن المُنشئ خاصًا ، وأعلن أيضًا طريقة ثابتة لإعادة كائن فئة.
نسخة الكود كما يلي:
privatetest الطبقة العامة {
خصوصية خاصة () {
System.out.println ("مُنشئ الافتراضي الخاص") ؛
}
privatetest static static getInstance () {
إرجاع New PrivateTest () ؛
}
}
يُطلق على الكود الذي تم تعديله أعلاه "نمط المفرد" ، وهي طريقة getInstance تُرجع دائمًا مثيلًا واحدًا فقط من هذه الفئة. ولكن لماذا يمنع هذا الرمز الفئة من الوراثة؟ النظر في الكود التالي ، يجب أن يرث الفئة المعلنة الفئة أعلاه.
الطبقة العامة privateTest2 يمتد privatetest {
}
بعد تجميع الفئة الأولى ، إذا قمت بعد ذلك بتجميع الفئة الثانية ، فإن برنامج التحويل البرمجي JDK يبلغ عن خطأ وستحصل على رسالة الخطأ التالية:
PrivateTest2.java:1: Privatetest () لديه وصول خاص في الخصوصية
الطبقة العامة privateTest2 يمتد privatetest {
^
1 خطأ
لا يمكن للصف الثاني أن يرث الدرجة الأولى. ولكن ماذا يعني الخطأ؟ تتطلب لغة Java توفير طريقة مكون واحد على الأقل في الفصل. إذا لم تقدم أي أساليب قطعة أثرية ، فسيقوم JDK بإدخال طريقة قطعة أثرية افتراضية في الفصل الذي أعلنته. وبعبارة أخرى ، فإن الافتراضي هو طريقة مكون بدون معلمات ، وجسم مكون فارغ ، وإذن وصول عام. ومع ذلك ، إذا قمت بتحديد طريقة مكون بنفسك ، فلن يقوم برنامج التحويل البرمجي JDK بإدراج طريقة المكون الافتراضية هذه. لقد أعلننا للتو عن طريقة المكون الافتراضي في فئة PrivateTest ، لكننا قمنا بتغيير إذن الوصول العام الافتراضي إلى إذن خاص ، والتي تتماشى مع قواعد فحص بناء جملة JDK.
الآن دعونا نلقي نظرة على القسم الثاني. تتطلب منك لغة Java أيضًا استدعاء طريقة مكون Super Class على السطر الأول من طريقة المكون. هذا ضروري لبدء ميزات الميراث. في Java ، نكممل هذه المهمة من خلال استدعاء طريقة Super () ، والتي سيتم تعيينها على طريقة المكون من الطبقة الفائقة. إذا لم تقدم مُنشئًا افتراضيًا للطبقة الفائقة ، فسيقوم برنامج التحويل البرمجي JDK بإدراج طريقة مكون من الفئة الفائقة الافتراضية للاتصال.
لقد أعلننا للتو المُنشئ كإذن خاص في الدرجة الأولى. الآن ، عندما نرث هذه الفئة من فئات أخرى ، سيحاول المترجم استدعاء طريقة مكون الفئة الفائقة الافتراضية. نظرًا لأن أساليب المكون في نطاق الفئة الفائقة يتم الإعلان عنها كذنه خاص ، فسيقوم المترجم بالإبلاغ عن خطأ يقول أنه لا يمكن استدعاء أساليب مكون الفئة الفائقة. لذلك ، فإننا نمنع أن يكون هناك فئة من فئات أخرى من خلال طرق غير رسمية.
عثمان سليم
جامعة محمد علي جناح
البريد الإلكتروني: [email protected]