مواصفات الوصول لجافا
و يتم تنظيم إمكانية الوصول إلى الفئات "classes" ، و المشيدات "constructors" ، و المناهج "methods" و الحقول "fields" باستخدام محددات الوصول "Access Modifiers" بمعنى آخر الفئة يمكنها السيطرة على إمكانية الوصول إلى المعلومات أو البيانات الخاصة بها من قبل فئات أخرى. للاستفادة من عملية التغليف "encapsulation" ، فيجب الحد من إمكانية الوصول بأكبر قدر ممكن.
جافا يوفر عددا من محددات الوصول "Access Modifiers" لمساعدتك على ضبط مستوى الوصول الذي تريده للفئات "classes" فضلا عن الحقول "fields" و المناهج "methods" و المشيدات "constructors" في الفئات الخاصة بك. أي عضو "member" يصبح لديه حزمة "package" افتراضية أو وصول افتراضي عندما لا يتم تحديد محدد الوصول له.
محددات الوصول "Access Modifiers"
1. private
2. protected
3. default
4. public
محدد الوصول العام public
الحقول "fields" و المناهج "methods" و المشيدات "constructors" المعلن العامة "public" (الأقل تقييدا) ضمن فئة عامة "public" هي قابلة للوصول من طرف أي فئة في برنامج جافا ، سواء كانت هذه الفئات في نفس الحزمة "package" أو في حزمة أخرى.
محدد الوصول الخاص private
لا يمكن استخدام الحقول "fields" أو المناهج "methods" الخاصة "private" (الأكثر تقييدا) من قبل الفئات "classes" و الواجهات "Interfaces". فإنه أيضا لا يمكن للحقول "fields" أو المناهج "methods" داخل نفس الواجهة أن تستخدمهم. الحقول "fields" و المناهج "methods" و المشيدات "constructors" المعلن خاصة "private" تخضع لقيود الصارمة، مما يعني أنه لا يمكن الوصول إلىها من أي مكان خارج الطبقة. استراتيجية التصميم جعل جميع الحقول خاصة "private" و وفّرت لها مناهج عامة جالبة " getter methods".
محدد الوصول المحمي protected
لا يمكن استخدام الحقول "fields" أو المناهج "methods" المحمية "protected" من قبل الفئات "classes" و الواجهات "Interfaces". فإنه أيضا لا يمكن للحقول "fields" أو المناهج "methods" داخل نفس الواجهة أن تستخدمهم. الحقول "fields" و المناهج "methods" و المشيدات "constructors" المعلن محمية "protected" في الفئة الفائقة لا يمكن الوصول إليها إلا عن طريق الفئات الفرعية في حزم أخرى. يمكن للفئات الموجودة في نفس الحزمة أيضا الوصول إلى الحقول المحمية "protected fields" والمناهج المحمية و المشيدات المحمية كذلك ، حتى لو انهم ليسوا فئة فرعية لأعضاء الفئة المحميين.
محدد الوصول الافتراضي default
جافا توفر محدد افتراضي "default" الذي يستخدم عند عدم وجود أي محدد وصول "access modifier". أي فئة "class" ، أو مشيد "constructor" ، أو منهج "method" أو حقل "field" لا يوجد لديه محدد الوصول "access modifier" معلن فهو غير قابل للوصول إلا من خلال فئات موجودة في نفس الحزمة. لا يستخدم المحدد الافتراضي "default modifier" للحقول و المناهج الموجودة داخل الواجهة "interface".
أدناه هو برنامج لشرح استخدام محددات الوصول "access modifiers" العامة "public" والخاصة "private" و المحمية "protected" والافتراضية "default" أثناء عملية الوصول إلى الحقول "fields" و المناهج "methods". إخراج "output" كل واحد من هذه الملفات لجافا تصور لنا محددات الوصول لجافا.
الفئة الأولى هي SubclassInSamePackage.java التي هي موجودة في الحزمة pckage1 . ملف جافا يحتوي على الفئة الاساسية و الفئة الفرعية داخل محيط الفئة التي تنتمي إلى نفس الفئة كما هو مبين أدناه.
Output
Value of x is : 10
Value of x is : 20
Value of z is : 10
Value of z is : 30
Value of x is : 10
Value of x is : 20
الفئة الثانية هي SubClassInDifferentPackage.java التي هي موجودة في مجموعة مختلفة عن الفئة الأولى. تمتد هذه الفئة من الفئة لأولى (SubclassInSamePackage.java).
Output
Value of x is : 10
Value of x is : 30
Value of z is : 10
الفئة الثانية هي ClassInDifferentPackage.java التي هي موجودة في مجموعة مختلفة عن الفئة الأولى. تمتد هذه الفئة من الفئة لأولى.
Output
Value of x is : 10
Value of x is : 30
مستويات محددات الوصول
مستويات محددات الوصول تحدد ما إذا كان بإمكان الفئات الأخرى استخدام حقل "field" معين أو استدعاء منهج "method" معين. هناك مستويان من محددات الوصول:
1- المستوى الأعلى أو ما يسمى مستوى محددات الوصول للفئة "Class level access modifiers" (فئات جافا فقط)
ولا يسمح سوى لإثنين من محددات الوصول هم العامة "public" و افتراضي (يعني عدم وجود أي محدد وصول)
- إذا كانت الفئة العامة "public" ، يمكن الوصول إليها من أي مكان.
- إذا كانت الفئة ليس لديها أي محدد وصول ، يمكن الوصول إليها إلا من نفس الحزمة فقط.
2- مستوى محددات الوصول للعضو (متغيرات و مناهج جافا)
يسمح لجميع محددات الوصول الأربعة وهم العامة "public"، الخاصة "private" ، محمية "protected" و الافتراضية (بدون محددات الوصول).
• إذا كان العضو عام "public" ، يمكن الوصول إليه من أي مكان.
• إذا كان العضو ليس لديه أي محدد وصول ، يمكن الوصول إليه إلا من نفس الحزمة فقط.
• إذا كان العضو خاص "private" -- يمكن للأعضاء فقط الوصول إليه.
• إذا كان العضو محمي "protected" -- يمكن الوصول إليه من "نفس الحزمة" و من أي فئة فرعية موجودة في أي حزم.
لفهم أفضل، هذه صياغة لمستوى محددات الوصول للعضو كجدول :
Access Modifiers محددات الوصول |
Same Class نفس الفئة |
Same Package نفس الحزمة |
Subclass الفئة الفرعية |
Other packages الحزم الأخرى |
public | Y نعم |
Y نعم |
Y نعم |
Y نعم |
protected | Y نعم |
Y نعم |
Y نعم |
N لا |
no access modifier | Y نعم |
Y نعم |
N لا |
N لا |
private | Y نعم |
N لا |
N لا |
N لا |
ماذا عن محدد الوصول sync
ردحذف