تُستخدم محددات الوصول في جافا لتوفير التحكم في الوصول في جافا. توفر جافا التحكم في الوصول من خلال ثلاث كلمات رئيسية – private، protected، وpublic. ليس من الضروري استخدام هذه المحددات دائمًا، لذلك لدينا واحدة أخرى تُدعى “الوصول الافتراضي”، “الوصول في نطاق الحزمة” أو “بدون محدد”.
محددات وصول جافا
يمكننا استخدام محددات وصول جافا مع الفئات وكذلك المتغيرات والطرق الفئوية. يُسمح لنا باستخدام محددات الوصول “public” أو “default” فقط مع فئات جافا.
- إذا كانت الفئة “public” ، يمكننا الوصول إليها من أي مكان، أي من أي فئة موجودة في أي حزمة أخرى وما إلى ذلك.
- يمكن أن يكون لدينا فقط فئة “public” واحدة في ملف المصدر ويجب أن يكون اسم الملف هو نفس اسم الفئة العامة.
- إذا كانت الفئة لديها “وصول افتراضي” ، يمكن الوصول إليها فقط من فئات أخرى في نفس الحزمة.
محددات وصول جافا مع فصيل الفئة
يمكننا أن نستخدم جميع المحددات الأربعة لوصول المتغيرات العضوية والطرق الخاصة بالصف. ومع ذلك، يتم تطبيق قواعد محدد الوصول للأعضاء بعد قواعد الوصول على مستوى الصف. على سبيل المثال، إذا كان الصف لديه وصول افتراضي فإنه لن يكون مرئيًا في حزم أخرى وبالتالي فإن الطرق والمتغيرات من الصف لن تكون مرئية أيضًا. سننظر في كل واحدة منها على حدة ثم سنقوم بعرض استخدام محددات وصول جافا مع برنامج بسيط.
محددات وصول جافا – الكلمة الرئيسية العامة
إذا كان عضو الصف “عام” فيمكن الوصول إليه من أي مكان. يتم الوصول إلى المتغير العضوي أو الطريقة على نطاق عالمي. هذه هي الطريقة الأبسط لتوفير الوصول إلى أعضاء الصف. ومع ذلك، يجب أن نأخذ الحذر عند استخدام هذه الكلمة الرئيسية مع متغيرات الصف خلافا لذلك يمكن لأي شخص تغيير القيم. عادة، يتم الاحتفاظ بمتغيرات الصف كخاصة ويتم توفير طرق الحصول والتعيين للعمل معها.
محددات وصول جافا – الكلمة الرئيسية الخاصة
إذا كان عضو الفئة “خاص” ، فسيكون متاحًا فقط داخل نفس الفئة. هذا هو أكثر الوصول مقيدًا ولن يكون العضو الفئة مرئيًا للعالم الخارجي. عادةً ما نحتفظ بمتغيرات الفئة كخاصة والأساليب التي يتم استخدامها فقط داخل الفئة كخاصة.
الوصول إلى الكلمة المحمية في جافا
إذا كان عضو الفئة “محمي” ، فسيكون متاحًا فقط للفئات في نفس الحزمة والفئات المشتقة. هذا التعديل أقل قيودًا من الخاص وأكثر قيودًا من الوصول العام. عادةً ما نستخدم هذا الكلمة الرئيسية للتأكد من أن متغيرات الفئة متاحة فقط للفئات المشتقة.
الوصول الافتراضي في جافا
إذا لم يتم تحديد أي محدد وصول لعضو الفئة، يُعامل على أنه يحمل صلاحيات الوصول الافتراضية. قواعد الوصول مشابهة لتلك المتعلقة بالفئات، وسيكون عضو الفئة ذو الوصول الافتراضي قابلاً للوصول فقط للفئات في نفس الحزمة. هذا الوصول أقل قيوداً من الوصول العام والوصول المحمي، ولكنه أكثر قيوداً من الوصول الخاص. (أقل قابلية للوصول) خاص < افتراضي < محمي < عام (أكثر قابلية للوصول)
الجدول أدناه يلخص محددات الوصول أعلاه بالنسبة لفئات مختلفة في نفس الحزمة أو حزم أخرى والفئات الفرعية.
لنقم بكتابة بعض الفئات البسيطة حيث سنرى محددات الوصول في لغة البرمجة جافا في العمل.
TestA.java
package com.journaldev.access;
class TestA {
public void methodPublic(){
methodPrivate();
}
protected void methodProtected(){
methodPrivate();
}
void methodDefault(){
methodPrivate();
}
private void methodPrivate(){}
}
يرجى ملاحظة أن فئة TestA لديها وصول افتراضي وأن الطريقة الخاصة بالفئة قابلة للوصول لجميع أجزاء نفس الفئة.
TestB.java
package com.journaldev.access;
import com.journaldev.access.TestA;
public class TestB {
public static void main(String args[]) {
new TestA().methodPublic();
new TestA().methodProtected();
new TestA().methodDefault();
}
public void methodPublic() {
}
protected void methodProtected() {
}
void methodDefault() {
}
private void methodPrivate() {
}
}
يرجى ملاحظة أن TestB في نفس الحزمة كفئة TestA وبالتالي يمكنه الوصول إلى أعضاءها الفئوية. الأعضاء الخاصة غير قابلة للوصول ولكن جميع الأعضاء الأخرى قابلة للوصول بسبب نفس الحزمة.
TestC.java
package com.journaldev.access.child;
import com.journaldev.access.TestB;
public class TestC {
public static void main(String[] args) {
new TestB().methodPublic();
}
}
تظهر أنه يمكن الوصول إلى فئة TestB لأنها عامة. يمكن الوصول إلى أعضاء TestB العامة فقط لأن فئة TestC ليست في نفس الحزمة ولا تكون فئة فرعية لـ TestB.
TestE.java
package com.journaldev.util;
import com.journaldev.access.TestB;
public class TestE extends TestB {
public static void main(String[] args) {
new TestB().methodPublic();
new TestB().methodProtected(); // compile time error
// يعمل، يتم الوصول إلى الطريقة المحمية في الفئة الأم باستخدام الفئة الفرعية
new TestE().methodProtected();
}
}
الفصل TestE هو فصل فرعي من TestB، يمكننا الوصول إلى أعضاء TestB المحمية من خلال الفصل الفرعي TestE. إذا حاولنا الوصول إلى الطريقة المحمية في الفئة الأم مباشرة، سنحصل على خطأ في وقت الترجمة. هذا كل شيء بالنسبة لمحددات وصول Java، فهي سهلة الفهم. فقط لا ترتبك بين وصول الافتراضي والمحمي. طريقة سهلة لتذكرها هي أن وصول الافتراضي أكثر تقييدًا من المحمي، وأن أعضاء المحمي يمكن الوصول إليها في الفصول الفرعية. مؤخرًا قمت بإنشاء فيديو لشرح محددات وصول Java بالتفصيل، يمكنك مشاهدته على YouTube من خلال الرابط التالي: https://www.youtube.com/watch?v=QKjnbC3UBtY
Source:
https://www.digitalocean.com/community/tutorials/java-access-modifiers