معدِّلات مستوى الوصول جافا. الرؤية. محددات الوصول. معدل الوصول المفتوح - عام

توفر لغة Java العديد من المعدلات مقسمة إلى الفئات التالية:

  • الوصول الى المعدل
  • معدل عدم الوصول

يتم استخدام المعدل لتعريف فئة أو طريقة أو متغير ، وعادة ما يكون في مقدمة البيان. من خلال المثال التالي للتوضيح:

فئة عامة className (// ...) منطقية خاصة myFlag ؛ الأسابيع المزدوجة الثابتة النهائية = 9.5 ؛ BOXWIDTH النهائي المحمي الثابت = 42 ؛ عام ثابت باطل رئيسي (وسيطات سلسلة) (// 方法 体)

معدل التحكم في الوصول

Java ، يمكنك استخدام أحرف التحكم في الوصول لحماية الوصول إلى الفئات والمتغيرات والطرق والمُنشئين. تدعم Java أربعة أذونات مختلفة.

الافتراضي ، المعروف أيضًا باسم الافتراضي بشكل افتراضي،مرئي في نفس الحزمة ، لا تستخدم أي معدل.

خاص بالمحدد نشرمعدل مرئي داخل نفس الفئة.

نعم للإشارة جنرال لواءمعدل مرئي لجميع الفئات.

محمية ، في محمييحدد modifier أن جميع الفئات والفئات الفرعية داخل نفس الحزمة مرئية.

معدل الوصول الافتراضي - لا تستخدم أي كلمات رئيسية

استخدم المتغيرات والأساليب المعلنة في معدل الوصول الافتراضي لفئة داخل نفس الحزمة المرئية. واجهة يتم فيها إعلان المتغيرات ضمنيًا على أنها نهائية ثابتة عامة ، وواجهة يكون أسلوب الوصول الافتراضي فيها عامًا.

العبارة في المثال التالي ، المتغيرات والأساليب لا يمكن أن تستخدم أي معدل.

إصدار السلسلة = "1.5.1" ؛ عملية منطقيةأمر () (عودة صحيحة ؛)

معدل الوصول الخاص - خاص

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

لا يمكن الوصول إلى المتغيرات المعلنة كنوع وصول خاص إلا خارج الفصل الدراسي من خلال طريقة getter العامة للفصل.

يُستخدم مُعدِّل الوصول الخاص بشكل أساسي لحماية تفاصيل التنفيذ والبيانات الموجودة خلف الفصل الدراسي.

تستخدم الفئات التالية معدِّل الوصول الخاص:

مسجل فئة عام (تنسيق سلسلة خاص ؛ سلسلة عامة getFormat () (إرجاع this.format ؛) تنسيق مجموعة باطلة عامة (تنسيق سلسلة) (this.format = format ؛))

على سبيل المثال ، التنسيق المتغير لفئة المسجل هو متغير خاص ، بحيث لا يمكن للفئات الأخرى الحصول على قيمة المتغير وتعيينها مباشرة. لتكون قادرًا على العمل مع متغير فئة آخر يحدد طريقتين عامتين: GetFormat () (تنسيق قيمة الإرجاع) و SetFormat (String) (إعداد التنسيق)

معدل الوصول المفتوح - عام

تم الإعلان عن الفئات والطرق والمنشآت والواجهات العامة التي يمكن أن تكون أي نوع آخر من الوصول.

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

تستخدم الميزات التالية التحكم في الوصول العام:

رئيسي باطل ثابت عام (وسيطات سلسلة) (// ...)

يجب تعيين طريقة برنامج Java الرئيسية () علنًا ، وإلا فلن يتمكن مترجم Java من تشغيل الفصل.

معدلات الوصول المحمية محمية

يتم الإعلان عن المتغيرات والطرق والمنشئات المحمية في نفس الحزمة ويمكن أن يكون لها أي نوع آخر من الوصول ، ويمكن الوصول إليها في حزم مختلفة عن طريق الفئات الفرعية.

لا يمكن تعديل معدّل الوصول المحمي عن طريق الفئات والواجهات ، ويمكن اعتبار الطرق ومتغيرات الأعضاء محمية ، ولكن لا يمكن إعلان حماية المتغيرات وأساليب الأعضاء في الواجهات.

يمكن للفئات الفرعية المعدلة الوصول إلى الأساليب والمتغيرات المحمية المعلنة ، حتى نتمكن من حماية الفئات غير المرتبطة باستخدام هذه الأساليب والمتغيرات.

تستخدم الفئة الرئيسية التالية معدِّل وصول محميًا تتجاوز الفئات الفرعية طريقة openSpeaker () الخاصة بالفئة الأصلية.

Class AudioPlayer (OpenSpeaker المنطقي المحمي (مكبر الصوت sp) (// 实现 细节)) فئة StreamingAudioPlayer (منطقي openSpeaker (مكبر الصوت sp) (// 实现 细节))

إذا تم إعلان أن طريقة openSpeaker () خاصة ، فبالإضافة إلى فئة AudioPlayer ، لا يمكنها الوصول إلى الطريقة. إذا تم الإعلان عن openSpeaker () للجمهور ، فإن جميع الفئات لديها القدرة على الوصول إلى الطريقة. إذا أردنا أن نجعل العملية مرئية للفئات الفرعية للفئة ، فسيتم إعلان أن الطريقة محمية.

التحكم في الوصول والميراث

لاحظ أن الطرق التالية لها قواعد موروثة:

    يجب أن تكون الفئة الرئيسية المُعلن عنها كطرق عامة في الفئة الفرعية عامة أيضًا.

    تم الإعلان عن Class Parent كطريقة محمية في فئة فرعية ، أو تم الإعلان عنها على أنها محمية ، أو تم الإعلان عنها علنًا. لا يمكن إعلان أنك خاص.

    لا يمكن وراثة الفئة الأصلية التي تم الإعلان عنها كطريقة خاصة.

معدل عدم الوصول

من أجل تحقيق عدد من الميزات الأخرى ، توفر Java أيضًا عددًا من المعدلات دون الوصول.

يستخدم المعدل الثابت لإنشاء طرق الفئة ومتغيرات الفئة.

المعدّل النهائي المستخدم لتزيين الفئات والطرق والمتغيرات ، لا يمكن وراثة الفئة المعدلة النهائية ، ولا يمكن توريث طريقة الفئة المعدلة ، ولا يمكن تغيير المتغيرات الثابتة المعدلة.

يتم استخدام المعدل المجرد لإنشاء فئات مجردة وطرق مجردة.

المعدلات المتزامنة والمتطايرة ، خاصة لتدفقات البرمجة.

معدل ثابت

    المتغيرات الثابتة:

    تُستخدم الكلمة الأساسية الثابتة للإعلان عن المتغيرات الثابتة التي لا تعتمد على كائن ، بغض النظر عن عدد كائنات المثيل للفئة ، فهي نسخة واحدة فقط من المتغير الثابت. تُعرف المتغيرات الثابتة أيضًا باسم متغيرات الفئة. لا يمكن التصريح عن المتغيرات المحلية كمتغيرات ثابتة.

    طرق ثابتة:

    يتم استخدام الكلمة الأساسية الثابتة للإعلان عن كائن مستقل عن الأسلوب الثابت. لا يمكن للطرق الثابتة استخدام فئة متغير غير ثابتة. طريقة ثابتة للحصول على البيانات من قائمة المعلمات ثم حساب البيانات.

يمكن استخدام الوصول إلى متغيرات الفئة والطرق مباشرةً مع وصول classname.variablename و classname.methodname.

في المثال التالي ، يتم استخدام معدل ثابت لإنشاء طرق فئة ومتغيرات فئة.

فئة عامة InstanceCounter (private static int numInstances = 0؛ static int getCount () (return numInstances؛) addInstance () (numInstances ++؛) InstanceCounter () (InstanceCounter.addInstance ()؛) عام ثابت باطل رئيسي (وسيطات سلسلة ) (System.out.println ("البدء بـ" + InstanceCounter.getCount () + "مثيلات") ؛ لـ (int i = 0 ؛ i< 500; ++i){ new InstanceCounter(); } System.out.println("Created " + InstanceCounter.getCount() + " instances"); } }

أمثلة على نتائج عملية التحرير أعلاه على النحو التالي:

بدأت مع 0 مثيل تم إنشاء 500 مثيل

المصنف النهائي

المتغيرات النهائية:

يمكن تهيئة المتغيرات النهائية بشكل صريح ويتم تهيئتها مرة واحدة فقط. تم التصريح عن دليل ككائنات طرفية لا يمكن أن يشير إلى كائن آخر. لكن الهدف النهائي هو المكان الذي يمكن فيه تغيير البيانات. هذا هو المرجع الأخير لكائن لا يمكن تغييره ، لكن يمكن تغيير قيمته.

عادة ما يتم استخدام المعدل النهائي معًا لإنشاء ثابت فئة معدل ثابت.

اختبار الفئة العامة (القيمة النهائية = 10 ؛ // 下面 是 声明 常量 的 实例 public static final int BOXWIDTH = 6 ؛ ثابت نهائي String TITLE = "(! LANG: Manager"; public void changeValue(){ value = 12; //将输出一个错误 } } !}

الطريقة النهائية

يتم توارث طرق فئة الوجهة بواسطة الفئات الفرعية ولكن لا يمكن تعديلها بواسطة الفئات الفرعية.

الغرض الرئيسي من الطريقة هو منع تغيير البيان النهائي للطريقة.

كما هو مبين أدناه ، باستخدام طرق نهاية معدل التصريح.

اختبار الفصل العام (تغيير اسم الفراغ النهائي العام () (// 方法 体))

الفئة النهائية

لا يمكن وراثة الفصول النهائية ، ولا يمكن لأي فئة أن ترث أيًا من خصائص الفصل النهائي.

اختبار الفصل النهائي العام (// 类 体)

معدل الملخص

فئة الملخص:

لا يمكن استخدام فئة مجردة لإنشاء مثيل لكائن ، والغرض الوحيد من العبارة هو تجريد فئة للامتداد المستقبلي لتلك الفئة.

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

يمكن للفئة المجردة أن تحتوي على طرق مجردة وطرق غير مجردة.

فئة الخلاصة Caravan (سعر مزدوج خاص ؛ نموذج سلسلة خاص ؛ عام سلسلة خاص ؛ goFast عام مجردة باطل () ؛ // 抽象 方法 public abstract void changeColor () ؛)

طريقة مجردة

لا توجد طريقة هي تنفيذ طريقة مجردة ، وهي طريقة تنفيذ ملموسة مقدمة من قبل الفئات الفرعية. لا يمكن الإعلان عن الأساليب المجردة على أنها نهائية وصارمة.

أي فئة فرعية ترث فئة مجردة يجب أن تنفذ جميع الطرق المجردة للفئة الأصلية ، ما لم تكن الفئة الفرعية فئة مجردة.

إذا كان الفصل يحتوي على عدد من الطرق المجردة ، فيجب التصريح عن الفئة كفئة مجردة. لا يمكن أن تحتوي فئة مجردة على طرق مجردة.

إعلان طريقة مجردة ينتهي بفاصلة منقوطة ، على سبيل المثال: النمط التجريدي العام ()؛

فئة الملخص العامة SuperClass (abstract void m () ؛ // 抽象 方法) الفئة الفرعية تمتد SuperClass (// 实现 抽象 方法 void m () (.........))

معدل متزامن

طريقة الكلمات الأساسية المتزامنة للإعلان في نفس الوقت عن وصول مؤشر ترابط واحد فقط. يمكن تطبيق المعدل المتزامن على أربعة معدلات وصول.

عرض عام باطل متزامن تفاصيل () (.......)

معدل الانتقال

يحتوي الكائن المتسلسل على متغيرات عابرة لمثيل Java Virtual Machine (JVM) تم تعديلها لتخطي هذا المتغير المحدد.

يتم تضمين المعدل في تعريف متغيرات البيان لفئات المعالجة المسبقة لأنواع البيانات والمتغيرات.

حد عابر الجمهور = 55 ؛ // لن تستمر في العمل العام ب ؛ // سيستمر

المعدلات المتطايرة

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

فئة عامة MyRunnable تنفذ Runnable (نشط منطقي متغير خاص ؛ تشغيل باطل عام () (نشط = صحيح ؛ بينما (نشط) // 第一 行 (// 代码)) توقف عام باطل () (نشط = خطأ ؛ // 第二行))

في ظل الظروف العادية ، يستدعي مؤشر ترابط أسلوب Run () (في Runnable الخاص بمؤشر ترابط مفتوح) في مؤشر ترابط آخر يستدعي أسلوب stop (). إذا كانت القيمة النشطة في السطر الأول يستخدم المخزن المؤقت الصف الثاني عندما تكون الحلقة النشطة كاذبة لا تتوقف.

ومع ذلك ، في الكود أعلاه ، نستخدم نشاطًا متغيرًا معدلًا بحيث تتوقف الحلقة.

التي تضيفها أثناء التهيئة لتغيير القيم. لغة جافا لديها مجموعة واسعة من المعدلات ، أهمها:

  • معدلات الوصول
  • معدِّلات الفئة ، والطريقة ، والمتغير ، والخيط غير المستخدمة للوصول.

لاستخدام معدل في Java ، يجب عليك تضمين الكلمة الأساسية الخاصة به في تعريف فئة أو طريقة أو متغير. يجب أن يأتي المُعدِّل قبل باقي عامل التشغيل ، كما هو موضح في الأمثلة التالية:

فئة عامة className (// ...) منطقية خاصة myFlag ؛ الأسابيع المزدوجة الثابتة = 9.5 ؛ BOXWIDTH النهائي المحمي الثابت = 42 ؛ main static void main (String arguments) (// جسم الطريقة)

معدِّلات الوصول

توفر Java عددًا من معدِّلات الوصول لتعيين مستويات الوصول للفئات والمتغيرات والطرق والمُنشئين. هناك أربع طرق وصول:

  • مرئي في الحزمة (افتراضي ولا يلزم تعديل).
  • مرئي للفصل فقط (خاص).
  • مرئي للجميع (عام).
  • مرئي للحزمة وجميع الفئات الفرعية (محمية).

معدل الوصول الافتراضي - لا توجد كلمات أساسية

معدل الوصول الافتراضي- يعني أننا لا نعلن صراحة عن مُعدِّل وصول في Java لفئة أو حقل أو طريقة ، إلخ.

المتغير أو الطريقة المعلنة بدون معدِّل التحكم في الوصول متاحة لأي فئة أخرى في نفس الحزمة. الحقول الموجودة في الواجهة عامة ، وثابتة ، ونهائية بشكل ضمني ، وتكون الطرق الموجودة في الواجهة عامة بشكل افتراضي.

مثال

يمكن التصريح عن المتغيرات والطرق في Java بدون أي معدلات ، كما هو موضح في المثال التالي:

إصدار السلسلة = "1.5.1" ؛ عملية منطقيةأمر () (عودة صحيحة ؛)

معدل الوصول الخاص

معدل خاص- لا يمكن الوصول إلى الطرق والمتغيرات والمنشآت التي تم الإعلان عن كونها خاصة في Java إلا ضمن الفئة المُعلنة نفسها.

معدل الوصول الخاص هو مستوى الوصول الأكثر تقييدًا. لا يمكن أن تكون الفئة والواجهات خاصة.

يمكن الوصول إلى المتغيرات المعلنة على أنها خاصة خارج الفصل الدراسي إذا كانت الطرق العامة التي تستقبلها موجودة في الفصل (انظر المثال والشرح أدناه).

يعد استخدام المعدل الخاص في Java هو الطريقة الرئيسية لإخفاء البيانات.

مثال

يستخدم الفصل التالي التحكم في الوصول الخاص:

مسجل فئة عام (تنسيق سلسلة خاص ؛ سلسلة عامة getFormat () (إرجاع this.format ؛) تنسيق مجموعة باطلة عامة (تنسيق سلسلة) (this.format = format ؛))

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

لإتاحة هذا المتغير للجميع ، حددنا طريقتين عامتين: getFormat ()، والتي تُرجع قيمة صيغة، و setFormat (سلسلة)الذي يحدد قيمته.

معدل الوصول العام

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

ومع ذلك ، إذا كنا نحاول الوصول إلى فئة عامة في حزمة أخرى ، فيجب استيراد الفئة العامة.

بفضل وراثة الفئة ، في Java ، يتم توريث جميع الطرق والمتغيرات العامة للفئة بواسطة الفئات الفرعية الخاصة بها.

مثال

تستخدم الوظيفة التالية التحكم في الوصول العام:

رئيسي باطل ثابت عام (وسيطات سلسلة) (// ...)

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

معدل الوصول المحمي

معدل محمي- لا يمكن الوصول إلى المتغيرات والطرق والمنشئات التي تم الإعلان عن حمايتها في فئة فائقة إلا عن طريق الفئات الفرعية في حزمة أخرى ، أو عن طريق أي فئة في حزمة الفئة المحمية.

لا يمكن تطبيق معدل الوصول المحمي في Java على الفئات والواجهات. يمكن اعتبار الأساليب والحقول محمية ، لكن لا يمكن إعلان حماية الأساليب والحقول الموجودة في الواجهة.

يمنح الوصول المحمي فئة فرعية القدرة على استخدام طريقة أو متغير مساعد ، مما يمنع فئة غير ذات صلة من محاولة استخدامها.

مثال

تستخدم الفئة الرئيسية التالية التحكم في الوصول المحمي بحيث تتجاوز الفئة الفرعية الخاصة بها الطريقة openSpeaker ():

Class AudioPlayer (OpenSpeaker المنطقي المحمي (Speaker sp) (// تفاصيل التنفيذ)) class StreamingAudioPlayer (منطقي openSpeaker (مكبر الصوت sp) (// تفاصيل التنفيذ))

ومع ذلك ، إذا حددنا طريقة openSpeaker ()باعتباره محميًا ، فلن يمكن الوصول إليه من أي فئة أخرى غير AudioPlayer. إذا قمنا بتعريفه بأنه عام ، فسيصبح متاحًا للجميع. لكن نيتنا أن نعرض هذه الطريقة فقط للفئة الفرعية ، ولهذا السبب استخدمنا المُعدِّل المحمي.

قواعد التحكم في الوصول والميراث

تنطبق القواعد التالية في Java على الطرق الموروثة:

  • يجب أيضًا أن تكون الطرق المعلنة للجمهور في الطبقة العليا عامة في جميع الفئات الفرعية.
  • يجب أن تكون الطرق المُعلن عنها محمية في طبقة عليا إما محمية أو عامة في الفئات الفرعية ؛ لا يمكن أن تكون خاصة.
  • فالأساليب المعلنة على أنها خاصة لا يرثها الجميع ، لذا لا توجد قاعدة لها.

معدِّلات الفئة ، والطريقة ، والمتغير ، والخيط غير المستخدمة للوصول

توفر Java عددًا من المُعدِّلات ليس للوصول إليها ، ولكن لتنفيذ العديد من الوظائف الأخرى:

  • المعدل ثابتةتستخدم لإنشاء الطرق ومتغيرات الفئة ؛
  • المعدل أخيرتستخدم لإكمال تنفيذ الفئات والطرق والمتغيرات ؛
  • المعدل نبذة مختصرةاللازمة لإنشاء فئات وأساليب مجردة ؛
  • الصفات التعريفية متزامنو متطايرهتستخدم في جافا للمواضيع.

معدل ثابت

معدل ثابت- تستخدم لإنشاء الطرق ومتغيرات الصنف.

المتغيرات الثابتة

يتم استخدام الكلمة الأساسية الثابتة لإنشاء متغيرات ستكون موجودة بشكل مستقل عن أي حالات تم إنشاؤها للفصل الدراسي. توجد نسخة واحدة فقط من متغير ثابت في Java ، بغض النظر عن عدد مثيلات الفئة.

تُعرف المتغيرات الثابتة أيضًا باسم متغيرات الفئة. في Java ، لا يمكن التصريح عن المتغيرات المحلية بأنها ثابتة.

طرق ثابتة

يتم استخدام الكلمة الأساسية الثابتة لإنشاء طرق موجودة بشكل مستقل عن أي حالات تم إنشاؤها للفصل الدراسي.

في Java ، لا تستخدم الطرق الثابتة أو الثابتة أي متغيرات حالة لأي كائن فئة ، يتم تعريفها. تأخذ الطرق الثابتة جميع البيانات من المعلمات ويتم تقييم بعض هذه المعلمات دون الرجوع إلى المتغيرات.

يمكن الوصول إلى متغيرات الفئة وطرقها باستخدام اسم الفئة متبوعًا بنقطة واسم المتغير أو الطريقة.

مثال

يتم استخدام المعدل الثابت في Java لإنشاء طرق ومتغيرات للفئة ، كما هو موضح في المثال التالي:

فئة عامة InstanceCounter (private static int numInstances = 0؛ static int getCount () (return numInstances؛) addInstance () (numInstances ++؛) InstanceCounter () (InstanceCounter.addInstance ()؛) عام ثابت باطل رئيسي (وسيطات سلسلة ) (System.out.println ("بدءًا من" + InstanceCounter.getCount () + "مثيل") ؛ لـ (int i = 0 ؛ i

سيتم الحصول على النتيجة التالية:

بدءًا من المثيل 0 تم إنشاء 500 مثيل

المعدل النهائي

المعدل النهائي- تستخدم لإتمام تنفيذ الأصناف والأساليب والمتغيرات.

المتغيرات النهائية

يمكن تهيئة المتغير النهائي مرة واحدة فقط. لا يمكن أبدًا تعيين متغير مرجعي تم الإعلان عنه على أنه نهائي للإشارة إلى كائن آخر.

ومع ذلك ، يمكن تغيير البيانات الموجودة داخل الكائن. وبالتالي ، يمكن تغيير حالة الكائن ، ولكن ليس المرجع.

مع المتغيرات في Java ، غالبًا ما يتم استخدام المعدل النهائي مع ثابت لجعل متغير الفئة ثابتًا.

مثال

public class Test (قيمة int النهائية = 10 ؛ // فيما يلي أمثلة للإعلانات الثابتة: public static final int BOXWIDTH = 6 ؛ static final String TITLE = "(! LANG: Manager"; public void changeValue(){ value = 12; //будет получена ошибка } } !}

الطرق النهائية

الطريقة النهائية لا يمكن تجاوزها من قبل أي فئة فرعية. كما ذكرنا سابقًا ، في Java ، يمنع المعدل النهائي تعديل طريقة بواسطة فئة فرعية.

القصد الرئيسي من جعل الطريقة نهائية هو أن محتوى الطريقة لا ينبغي أن يتغير من قبل الجانب.

مثال

يظهر التصريح عن الطريقة التي تستخدم المُعدِّل النهائي في إعلان الصنف في المثال التالي:

اختبار الفصل العام (تغيير اسم الفراغ النهائي العام () (// جسم الطريقة))

الدرجة النهائية

الغرض الرئيسي في Java من استخدام فئة تم إعلانها على أنها نهائية هو منع الفئة من التصنيف الفرعي. إذا تم وضع علامة على الفصل على أنه نهائي ، فلا يمكن للفصل أن يرث أي وظيفة من الفصل النهائي.

مثال

اختبار الفصل النهائي العام (// هيئة الفصل)

معدل مجردة

معدل مجردة- تُستخدم لإنشاء فئات وأساليب مجردة.

فئة مجردة

لا يمكن إنشاء مثيل لفئة الملخص. إذا تم الإعلان عن فئة مجردة ، فإن الغرض الوحيد منها هو تمديدها.

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

يمكن أن تحتوي فئة مجردة على كل من الأساليب المجردة وكذلك الطرق العادية.

مثال

فئة مجردة Caravan (سعر مزدوج خاص ؛ نموذج سلسلة خاص ؛ سنة سلسلة خاصة ؛ فراغ ملخص عام goFast () ؛ // أسلوب مجردة public abstract void changeColor () ؛)

طريقة مجردة

الطريقة المجردة هي طريقة معلنة مع أي تطبيق. يتم توفير جسم الطريقة (التنفيذ) بواسطة الفئة الفرعية. لا يمكن أن تكون الأساليب المجردة نهائية أو صارمة.

أي فئة توسع فئة مجردة يجب أن تنفذ جميع الطرق المجردة للفئة الممتازة ، ما لم تكن الفئة الفرعية فئة مجردة.

إذا كانت الفئة في Java تحتوي على واحد أو أكثر من الطرق المجردة ، فيجب إعلان الفئة بأنها مجردة. فئة مجردة ليست مطلوبة لتحتوي على طرق مجردة.

تنتهي الطريقة المجردة بفاصلة منقوطة. مثال: عينة مجردة عامة () ؛

مثال

فئة الملخص العامة SuperClass (abstract void m () ؛ // طريقة مجردة) الفئة SubClass تمتد SuperClass (// تنفذ الطريقة المجردة void m () (.........))

معدل متزامن

معدل متزامن

يتم استخدام الكلمة الأساسية المتزامنة للإشارة إلى أنه لا يمكن الوصول إلى طريقة إلا من خلال مؤشر ترابط واحد في كل مرة. في Java ، يمكن تطبيق المعدل المتزامن مع أي من معدلات الوصول الأربعة.

مثال

عرض عام باطل متزامن تفاصيل () (.......)

معدل عابر

يرشد متغير مثيل تم وضع علامة عابر عليه في Java Virtual Machine (JVM) لتخطي المتغير المعين عند إجراء تسلسل للكائن الذي يحتوي عليه.

يتم تضمين هذا المعدل في العبارة ، مما يؤدي إلى إنشاء متغير من فئة المتغير أو نوع البيانات السابق.

مثال

حد عابر الجمهور = 55 ؛ // لن تستمر في العمل العام ب ؛ // سيتم حفظها

معدل متقلب

معدل متقلب- تستخدم في Java للخيوط.

في Java ، يتم استخدام المعدل المتغير للسماح لـ JVM بمعرفة أن مؤشر ترابط الوصول المتغير يجب أن يدمج دائمًا نسخته الخاصة من المتغير مع النسخة الرئيسية في الذاكرة.

يؤدي الوصول إلى متغير متغير إلى مزامنة جميع المتغيرات المخزنة مؤقتًا في ذاكرة الوصول العشوائي. لا يمكن تطبيق المتغير المتغير إلا على متغيرات الحالة التي تكون من نوع كائن أو خاصة. يمكن أن تكون الإشارة إلى كائن متغير خالية.

مثال

فئة عامة MyRunnable تنفذ Runnable (نشط منطقي خاص ؛ تشغيل باطل عام () (نشط = صحيح ؛ بينما (نشط) (// سطر 1 // بعض الكود هنا)) توقف عام باطل () (نشط = خطأ ؛ / / سطر 2))

عادةً ما يتم استدعاء run () في مؤشر ترابط واحد (هذه هي المرة الأولى التي تبدأ فيها استخدام Runnable في Java) ويتم استدعاء stop () في مؤشر ترابط آخر. إذا تم استخدام القيمة المخزنة مؤقتًا النشطة في السطر 1 ، فلا يمكن للحلقة أن تتوقف حتى تضبط النشط على خطأ في السطر 2.

في الدرس التالي ، سنناقش العوامل الأساسية المستخدمة في لغة Java. سيعطيك هذا القسم نظرة عامة على كيفية استخدامها أثناء تطوير التطبيق.

سنحاول هنا دراسة جميع حالات استخدام معدِّلات الوصول تقريبًا. الاستثناء الوحيد هو استخدامها للتداخل ( متداخلة) وداخلي ( داخلي) ، وكذلك للواجهات ، لأننا لم نفكر في هذه الموضوعات بعد.

تعمل الفئات والحزم المستخدمة جنبًا إلى جنب مع معدِّلات الوصول كوسيلة للتغليف ، أي وسيلة لإخفاء تفاصيل التنفيذ خلف واجهة بسيطة.

يمكن تطبيق مُعدِّلات الوصول على كلٍّ من الفئات وأعضائها - الحقول والأساليب. هناك أربعة مُعدِّلات وصول إجمالاً ، وسنقدم هنا وصفًا موجزًا ​​لها ، ثم سننظر في كل منها بالتفصيل.

  • عامة- تم التصريح عن أي مكون باسم عامة، يمكن الوصول إليها من أي رمز
  • محمي- يسمح بالوصول إلى المكون داخل الحزمة والفئات للأحفاد
  • نشر- يسمح بالوصول إلى المكونات داخل الفصل
  • إفتراضي(بدون كلمة رئيسية) - يسمح بالوصول إلى المكونات الموجودة داخل الحزمة

فئات السليل هي فئات موروثة من فئة. الإرث لم ندرسه بعد.

الوصول إلى الفصول

بشكل افتراضي ، تتوفر فئات المستوى الأعلى في الحزمة التي تم تعريفها فيها.. ومع ذلك ، إذا تم التصريح عن فئة المستوى الأعلى باسم عامة، فهو متاح في كل مكان (أو في أي مكان تتوفر فيه الحزمة نفسها). لقد قصرنا هذا البيان على فئات المستوى الأعلى لأنه يمكن إعلان الفئات كأعضاء في فئات أخرى. نظرًا لأن هذه الفئات الداخلية أعضاء في الفصل ، فإنها تخضع لقواعد التحكم في الوصول لأعضاء الفصل..

الوصول إلى أعضاء الفصل

أعضاء الفصل متاحون دائمًا داخل جسم الفصل. تقصيريتوفر أعضاء الفصل أيضًا في الحزمة التي يتم فيها تعريف الفئة.

المعدل العام

بالنسبة للفئة غير المتداخلة ، يمكن تحديد مستوى واحد فقط من مستويي الوصول المحتملين: معطى إفتراضيو عامة . عندما يتم الإعلان عن الفصل كـ عامة، يجب أن يكون هو الوحيد عامةتم الإعلان عن الفئة في الملف ، ويجب أن يتطابق اسم الملف مع اسم الفئة.

كيف عامةيمكن الإعلان عن الفئات والحقول والأساليب والمُنشئين.

معدل محمي

سنناقش هذا المعدل بالتفصيل في موضوع وراثة الصنف. إذا لم يتم استخدام الوراثة ، فعندئذٍ يعمل هذا المعدل ، تمامًا مثل المعدل الافتراضي.

الشيء الوحيد الذي يمكن قوله الآن باختصار هو أنه للمكونات المعلنة كـ محمي، سيكون لديهم حق الوصول أي فئة طفل من أي حزمةأو أي فئة من نفس الباقة.

كيف محمييمكن الإعلان عن الحقول والأساليب والمنشئات والفئات المتداخلة والواجهات المتداخلة.

محمي .

معدل خاص

هذا هو معدّل الوصول الأكثر تقييدًا. تم إعلان العناصر كـ نشرمتاح فقط داخل نفس الفصل وليس لأي شخص خارج الفصل.

كيف نشريمكن الإعلان عن الحقول والأساليب والمنشئات والفئات المتداخلة والاهتمامات المتداخلة.

لا يمكن التصريح عن واجهات وفئات المستوى الأعلى كـ نشر .

تعد معدّلات الوصول موضوعًا بسيطًا ، لكننا سنعود إليها لاحقًا. في الوقت الحالي ، كانت مجرد مقدمة. والآن لبعض الممارسة ...

لقد أنشأت فئات Mod02.java و DefMod.java و ProMod.java و PrvMod.java التي تنتمي إلى الحزمة pro.java.pkg002 ، وفئة PubMod.java التي تنتمي إلى الحزمة pro.java.pkg003. بعد ذلك ، سأقدم فقط لقطات شاشة لهذه الفئات ونتائج البرنامج:

آخر تحديث: 03.10.2019

جميع أعضاء الفصل - الحقول والأساليب والخصائص - لديهم جميعًا معدلات الوصول. تسمح لك معدّلات الوصول بتعيين النطاق المسموح به لأعضاء الفصل الدراسي. أي أن معدِّلات الوصول تحدد السياق الذي يمكن فيه استخدام متغير أو طريقة معينة. في الموضوعات السابقة ، واجهناها بالفعل عندما أعلنا أن حقول الفصل ستكون عامة (أي مع المُعدِّل العام).

يستخدم C # معدّلات الوصول التالية:

    الجمهور: عام أو فئة عامة أو أحد أفراد الفصل. يمكن الوصول إلى عضو الفصل هذا من أي مكان في الكود ، وكذلك من البرامج والتجمعات الأخرى.

    خاص: فئة خاصة أو عضو في فئة. يمثل العكس تمامًا من المعدل العام. لا يمكن الوصول إلى مثل هذا الفصل الخاص أو عضو الفصل إلا من التعليمات البرمجية الموجودة في نفس الفئة أو السياق.

    محمي: يمكن الوصول إلى عضو الفصل هذا من أي مكان في الفصل الحالي أو في الفئات المشتقة. في هذه الحالة ، يمكن وضع الفئات المشتقة في تجميعات أخرى.

    داخلي: يمكن الوصول إلى فئة وأعضاء فئة مع مُعدِّل مشابه من أي مكان في الكود في نفس التجميع ، ولكن لا يمكن الوصول إليها من قبل البرامج والتجمعات الأخرى (كما هو الحال مع المُعدِّل العام).

    داخلي محمي: يجمع بين وظائف معدلين. يمكن الوصول إلى الفئات وأعضاء الفصل باستخدام هذا المعدل من التجميع الحالي ومن الفئات المشتقة.

    محمية خاصة: يمكن الوصول إلى عضو الفئة هذا من أي مكان في الفصل الحالي أو في الفئات المشتقة المحددة في نفس التجميع.

يمكننا تحديد معدّل الوصول بشكل صريح ، على سبيل المثال:

حالة فئة محمية خاصة (int a ؛ محمية باطلة Print () (Console.WriteLine ($ "a = (a)") ؛))

أو لا يمكننا تحديد:

حالة الفئة (int a ؛ void Print () (Console.WriteLine ($ "a = (a)") ؛))

إذا لم يتم تحديد معدل وصول للحقول والأساليب ، فسيتم تطبيق المعدل الخاص افتراضيًا.

الفئات والبنى التي تم الإعلان عنها بدون معدل لها وصول داخلي افتراضيًا.

يمكن أن تحتوي جميع الفئات والهياكل المحددة مباشرةً في مساحات الأسماء وغير المتداخلة في فئات أخرى على مُعدِّلات عامة أو داخلية.

لنلقِ نظرة على مثال وننشئ فئة الولاية التالية:

حالة الفئة العامة (// لا يهم ما إذا كان الحقل الافتراضي الخاص بـ Var ؛ int defaultVar ؛ // لا يمكن الوصول إلى الحقل إلا من الفئة الحالية الخاصة بـ privateVar ؛ // يمكن الوصول إليها من الفئة الحالية والفئات المشتقة التي تم تحديدها في نفس مشروع محمي خاص int protectedPrivateVar ؛ // يمكن الوصول إليه من الفئة الحالية والفئات المشتقة المحمية int protectedVar ؛ // متاح في أي مكان في المشروع الحالي الداخلي int InternalVar ؛ // متاح في أي مكان في المشروع الحالي ومن الفئات المشتقة في المشاريع الأخرى المحمية int الداخلية protectInternalVar؛ // متاح في أي مكان في البرنامج ، وكذلك للبرامج والتجمعات الأخرى public int publicVar ؛ // بشكل افتراضي يحتوي على المعدل الخاص الافتراضي void defaultMethod () => Console.WriteLine ($ "defaultVar = (defaultVar)" ) ؛ // الطريقة متاحة فقط من الفئة الحالية private void privateMethod () => Console.WriteLine ($ "privateVar = (privateVar)") ؛ // يمكن الوصول إليها من الفئة الحالية والفئات المشتقة المحددة في نفس بند مشروع خاص محمي بخاصية protitPrivateMethod () => Console.WriteLine ($ "protectedPrivateVar = (protectedPrivateVar)") ؛ // يمكن الوصول إليها من الفئة الحالية والفئات المشتقة المحمية void protectedMethod () => Console.WriteLine ($ "protectedVar = (protectedVar)") ؛ // متاح في أي مكان في الفراغ الداخلي الداخلي للمشروع الحالي internalMethod () => Console.WriteLine ($ "internalVar = (internalVar)") ؛ // يمكن الوصول إليها في أي مكان في المشروع الحالي ومن الفئات المشتقة في مشاريع أخرى محمية باطلة داخلية محمية بروتنيرنال ميثود () => Console.WriteLine ($ "protectedInternalVar = (protectedInternalVar)") ؛ // متوفر في أي مكان في البرنامج ، بالإضافة إلى البرامج والتجمعات الأخرى public void publicMethod () => Console.WriteLine ($ "publicVar = (publicVar)")؛ )

نظرًا لأنه تم الإعلان عن فئة الولاية باستخدام المُعدِّل العام ، فسيكون الوصول إليها متاحًا من أي مكان في البرنامج ، وكذلك من البرامج والتجمعات الأخرى. تحتوي فئة الولاية على خمسة حقول لكل مستوى وصول. بالإضافة إلى متغير واحد غير معدل يكون خاصًا بشكل افتراضي.

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

لنرى الآن كيف يمكننا استخدام متغيرات الفصل الخاصة بنا في البرنامج (أي في الطريقة الرئيسية لفئة البرنامج) ، إذا كان فصولا الولاية والبرنامج في نفس المشروع:

برنامج الفصل (static void Main (string args) (State state1 = new State () ؛ // لن نتمكن من تعيين قيمة إلى متغير الافتراضي defaultVar ، // نظرًا لأنه يحتوي على مُعدِّل خاص ولا ترى فئة البرنامج it // ولا ترى البيئة تسطير هذا السطر على أنه state1.defaultVar غير صحيح = 5 ؛ // خطأ ، لا يمكن الوصول إليه // ينطبق نفسه على متغير privateVar state1.privateVar = 5 ؛ // خطأ ، لا يمكن الوصول إليه // تعيين لن تعمل قيمة المتغير protectedPrivateVar ، // نظرًا لأن الفئة Program ليست فئة ترث من فئة State1.protectedPrivateVar = 5 ؛ // خطأ ، لا يمكن الوصول إليها // تعيين قيمة للمتغير المحمي سيفشل أيضًا ، // لأن class Program ليس فئة ترث من فئة State1.protectedVar = 5 ؛ // خطأ ، لا يمكن الوصول إليها // المتغير الداخلي مع المعدل الداخلي متاح من أي مكان في المشروع الحالي // لذلك نحن يمكن تعيينها بأمان قيمة state1.internalVar = 5 ؛ يمكن أيضًا الوصول إلى متغير // protectedInternalVar من أي مكان في حالة المشروع الحالية1.protectedInternalVar = 5 ؛ // المتغير publicVar هو public state1.publicVar = 5 ؛ ))

وبالتالي ، تمكنا فقط من تعيين المتغيرات InternalVar و protectedInternalVar و publicVar ، حيث تسمح لنا معدِّلاتها باستخدامها في هذا السياق.

نفس الشيء صحيح بالنسبة للطرق:

برنامج الفصل (ثابت باطل رئيسي (سلسلة args) (State state1 = new State () ؛ state1.defaultMethod () ؛ // خطأ ، لا يمكن الوصول إليه state1.privateMethod () ؛ // خطأ ، لا يمكن الوصول إليه state1.protectedPrivateMethod () ؛ // خطأ ، لا يمكن الوصول إليه state1.protectedMethod () ؛ // خطأ ، لا يمكن الوصول إليه state1.internalMethod () ؛ // ok state1.protectedInternalMethod () ؛ // ok state1.publicMethod () ؛ // ok))

هنا ، تبين أن ثلاث طرق فقط متاحة لنا: InternalMethod ، و protectedInternalMethod ، و publicMethod ، والتي تحتوي على المُعدِّلات داخلية ، وداخلية محمية ، وعام ، على التوالي.

بفضل نظام معدّلات الوصول هذا ، يمكنك إخفاء بعض جوانب تنفيذ الفصل من أجزاء أخرى من البرنامج.

على الرغم من حقيقة أن المعدلات العامة والداخلية متشابهة في تأثيرها ، إلا أن هناك فرقًا كبيرًا. ستتاح أيضًا الفصول الدراسية وأعضاء الفصل باستخدام المُعدِّل العام للبرامج الأخرى ، إذا تم وضع الفصل المعين في مكتبة ديناميكية dll ثم استخدامها في هذه البرامج.