اليوم سوف نتعلم عن مراقبة حقوق الوصول في جافا. قبل مناقشة التحكم في الوصول ، دعنا نناقش سبب الحاجة إلى التحكم في الوصول. النظر في سيناريوهات:
السيناريو 1: كتب المهندس أ فئة فئة ، لكن المهندس أ لا يريد الوصول إلى الفئة من قبل فصول أخرى تستخدم في التطبيق ، فكيف يجب أن نتعامل معه؟
السيناريو 2: إذا كتب المهندس أ فئة Classa ، والتي لديها طريقتان Fun1 و Fun2 ، فإن المهندس يريد فقط أن يكون المرح 1 مرئيًا للعالم الخارجي. وهذا يعني ، إذا استدعى المهندسون الآخرون Classa ، فيمكنهم فقط استدعاء Method Fun1 ، فماذا يجب أن نفعل؟
في هذا الوقت ، يمكن أن يلعب التحكم في إذن الوصول دورًا.
في Java ، يتم توفير أربعة أنواع من مراقبة حقوق الوصول: حقوق الوصول الافتراضية (حقوق الوصول إلى الحزم) ، والخاص ، والخاصة ، والمحمية.
لاحظ أنه يمكن فقط استخدام أذونات الوصول الافتراضية والجمهور لتعديل الفئة لأنواع الأذونات الأربعة المذكورة أعلاه. الأذونات الأربعة للفئة المعدلة على ما يرام. (الطبقات المذكورة في هذا المكان تستهدف الفصول الخارجية ، وليس الطبقات الداخلية)
سيشرح ما يلي عناصر التحكم في حقوق الوصول الأربعة لأعضاء فئة التعديل وفئة التعديل.
1. فئة التعديل
أذونات الوصول الافتراضية (أذونات الوصول إلى الحزمة): إذا تم استخدامها لتعديل فئة ، فهذا يعني أن الفئة مرئية فقط لفئات أخرى في نفس الحزمة.
العام: إذا تم استخدامه لتعديل الفصل ، فهذا يعني أن الفصل مرئي لجميع الفئات الأخرى.
دعونا نلقي نظرة على الفرق بين الاثنين إلى بعض الأمثلة:
مثال 1:
main.java:
حزمة com.cxh.test1 ؛ الفئة العامة الرئيسية { / ** * param args * / public static void main (string [] args) {// todo method method method people = new people ("tom") ؛ System.out.println (people.getName ()) ؛ }} people.java
حزمة com.cxh.test1 ؛ الفئة الأشخاص {// إذن الوصول الافتراضي (إذن الوصول إلى الحزمة) اسم السلسلة الخاصة = null ؛ الناس العامة (اسم السلسلة) {this.name = name ؛ } السلسلة العامة getName () {return name ؛ } public void setName (اسم السلسلة) {this.name = name ؛ }}كما يتضح من الكود ، يستخدم تعديل فئة الأشخاص أذونات الوصول الافتراضية ، وبما أن فئة People والفئة الرئيسية في نفس الحزمة ، فإن فئة People مرئية للفئة الرئيسية.
نتائج تشغيل البرنامج:
مثال 2:
people.java
حزمة com.cxh.test2 ؛ الفئة الأشخاص {// إذن الوصول الافتراضي (إذن الوصول إلى الحزمة) اسم السلسلة الخاصة = null ؛ الناس العامة (اسم السلسلة) {this.name = name ؛ } السلسلة العامة getName () {return name ؛ } public void setName (اسم السلسلة) {this.name = name ؛ }}في هذا الوقت ، فئة الناس والطبقة الرئيسية ليست في نفس الحزمة. ماذا سيحدث؟
فيما يلي الأخطاء المطلوبة في الفصل الرئيسي:
يطالب أن فئة Peolple غير مرئية في الفصل الرئيسي. من هذا ، يمكننا أن نرى أنه إذا تم تعديل فئة مع أذونات الوصول الافتراضية ، فإن الفئة مرئية فقط لفئات أخرى في نفس الحزمة ولا تظهر الفئات في حزم مختلفة.
كما هو موضح في موجه التصحيح السريع في الشكل أعلاه ، إذا قمت بتغيير أذونات الوصول الافتراضية لفئة الأشخاص إلى الأماكن العامة ، فستكون فئة الأشخاص مرئية للفئة الرئيسية.
2. طرق ومتغيرات تعديل الفئات
أذونات الوصول الافتراضية (أذونات الوصول إلى الحزمة): إذا تم تعديل أساليب أو متغيرات الفئة من خلال أذونات الوصول إلى الحزمة ، فهذا يعني أنه لا يمكن عرض أساليب الفئة أو المتغيرات إلا مع عرضها في فئات أخرى في نفس الحزمة ، ولا يمكن استدعاء طرق الفئة أو المتغيرات في الفئات في فئات مختلفة.
خاص: إذا تم تعديل أساليب الفئة أو المتغيرات من قبل الخاص ، فلا يمكن الوصول إلى أساليب أو متغيرات الفئة إلا في الفصل نفسه ولا يمكن عرضها في الفصل أو في فئات أخرى.
محمية: إذا تم تعديل طرق أو متغيرات الفئة بواسطة محمية ، فيمكن الوصول إلى طرق أو متغيرات هذه الفئة لنفس فئة الحزمة. بالنسبة للفئات ذات الحزم المختلفة ، يمكن فقط للفئات الموروثة من تلك الفئة الوصول إلى طرق أو متغيرات تلك الفئة.
الجمهور: الأساليب أو المتغيرات المعدلة من قبل الجمهور مرئية في أي مكان.
دعنا نأخذ بعض الأمثلة لمعرفة الاختلافات بين أساليب ومتغيرات الفصول الدراسية المنتشر:
مثال 3:
Main.java لم يتغير
people.java
حزمة com.cxh.test1 ؛ الفئة العامة الناس {اسم السلسلة الخاصة = null ؛ الناس العامة (اسم السلسلة) {this.name = name ؛ } String getName () {// إذن الوصول الافتراضي (إذن الوصول إلى الحزمة) اسم الإرجاع ؛ } void setName (اسم السلسلة) {// إذن الوصول الافتراضي (إذن الوصول إلى الحزمة) this.name = name ؛ }}في هذا الوقت ، يمكن عرض أساليب الاتصال GetName و SetName في الفصل الرئيسي.
ولكن إذا لم يكن فصل الناس والطبقة الرئيسية في نفس الحزمة:
حزمة com.cxh.test2 ؛ // إنه في حزمة مختلفة من الفئة الرئيسية الفئة العامة People {Private String Name = null ؛ الناس العامة (اسم السلسلة) {this.name = name ؛ } String getName () {// إذن الوصول الافتراضي (إذن الوصول إلى الحزمة) اسم الإرجاع ؛ } void setName (اسم السلسلة) {// إذن الوصول الافتراضي (إذن الوصول إلى الحزمة) this.name = name ؛ }}في هذا الوقت ، سيتم مطالبة خطأ في الفصل الرئيسي:
من هذا ، يمكننا أن نرى أنه إذا تم استخدام إذن الوصول الافتراضي لتعديل أساليب أو متغيرات الفئة ، فيمكن الوصول إليها فقط في فئات أخرى من نفس الحزمة.
مثال 4:
people.java
حزمة com.cxh.test1 ؛ الفئة العامة الناس {اسم السلسلة الخاصة = null ؛ الناس العامة (اسم السلسلة) {this.name = name ؛ } سلسلة محمية getName () {return name ؛ } void setName (اسم السلسلة) {this.name = name ؛ }}في هذا الوقت ، يمكنك عرض أساليب الاتصال GetName و SetName بشكل رئيسي.
إذا كانت فئة الناس والطبقة الرئيسية في حزم مختلفة:
حزمة com.cxh.test2 ؛ الفئة العامة الناس {اسم السلسلة الخاصة = null ؛ الناس العامة (اسم السلسلة) {this.name = name ؛ } سلسلة محمية getName () {return name ؛ } void setName (اسم السلسلة) {this.name = name ؛ }}سيتم الإبلاغ عن خطأ في MAIN:
إذا تم تحديد رجل في الفصل في com.cxh.test1 لروث الأشخاص ، فيمكنك عرض أساليب الاتصال getName و setName في الفصل الدراسي:
حزمة com.cxh.test1 ؛ استيراد com.cxh.test2.people ؛ يمتد Man Class Public People {public man (اسم السلسلة) {super (name) ؛ } السلسلة العامة tostring () {return getName () ؛ }}فيما يلي بعض المعرفة حول حزم Java وملفات الفصل:
1) تُستخدم الحزم في Java بشكل أساسي لمنع تعارضات تسمية الملف وتسهيل تنظيم الكود وإدارته ؛
2) بالنسبة لملف رمز مصدر Java ، إذا كان هناك فئة عامة ، فيمكن أن يكون هناك فئة عامة واحدة فقط ، ويجب أن يكون اسم ملف رمز المصدر هو نفسه تمامًا مثل اسم الفئة العامة. بالإضافة إلى ذلك ، إذا كانت هناك فئات أخرى ، فإن هذه الفئات غير مرئية خارج الحزمة. إذا لم يكن ملف رمز المصدر يحتوي على فئة عامة ، فيمكن تسمية اسم ملف رمز المصدر كما يرضي.
ما سبق هو كل شيء عن هذا المقال ، آمل أن يكون مفيدًا لتعلم الجميع.