شرح معدّلات الوصول في Java

ما هي معدّلات الوصول؟

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

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

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

يمكن تطبيق مُعدِّلات الوصول هذه على الحقول والأساليب والفئات (الفئات هي حالة خاصة ، وسننظر إليها في نهاية هذه المقالة). فيما يلي نظرة عامة سريعة 1 على ماهية Access Levelsكل منها Access Modifier:

مرجع جدول معدّلات الوصول:

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

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

يسمح بالوصول إلى متغير أو طريقة فقط في الفصل الذي تم إنشاؤه فيه. لا توجد فئة أخرى بخلاف الفئة التي أنشأت المتغير أو الطريقة يمكنها الوصول إليه. هذا يشبه إلى حد كبير أعضائك الداخلية. لا يمكن الوصول إليها إلا من قبل المالك. لجعل متغير أو طريقة خاصة ، يمكنك ببساطة إلحاق الكلمة الأساسية الخاصة قبل نوع المتغير أو الطريقة. دعونا نستخدم الخاص في مثال الترميز. إذا أراد أحد البنوك تقديم سعر فائدة بنسبة 10٪ على قروضه ، فسوف يتأكد من أن متغير سعر الفائدة (لنفترض int int_rate;) سيبقى خاصًا حتى لا تحاول أي فئة أخرى الوصول إليه وتغييره. فمثلا؛

private String name;

ينشئ المثال أعلاه متغيرًا يسمى name ويضمن أنه لا يمكن الوصول إليه إلا داخل الفئة التي تم إنشاؤه منه.

مثال آخر على الطريقة هو

private void setAge(){ System.out.println("Set Age"); }

يضمن المثال أعلاه أن الطريقة setAge يمكن الوصول إليها فقط داخل الفئة التي تم إنشاؤها منها وليس في أي مكان آخر.

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

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

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

على سبيل المثال ، لإعلان فصل دراسي عام ، كل ما تحتاجه هو:

public class Animal{ }

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

public int age; public int getAge(){ }

أعلاه طرق تحديد متغير وطريقة عامة.

معدّل الوصول الافتراضي

يختلف معدّل الوصول الافتراضي عن جميع معدّلات الوصول الأخرى لأنه لا يحتوي على كلمة أساسية. لاستخدام معدّل الوصول الافتراضي ، فأنت ببساطة لا تستخدم أيًا من معدّلات الوصول الأخرى وهذا يعني ببساطة أنك تستخدم معدّل وصول افتراضيًا.

على سبيل المثال ، يمكنك استخدام معدّل الوصول الافتراضي لفئة ما

class Bird{ }

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

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

int age; void setNewAge(){ }

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

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

يرتبط معدل الوصول المحمي ارتباطًا وثيقًا بمعدِّل الوصول الافتراضي. يحتوي معدّل الوصول المحمي على خصائص معدّل الوصول الافتراضي ولكن مع القليل من التحسين.

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

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

لاحظ أنه بدون ميزة الوراثة ، يكون لمعدِّل الوصول الافتراضي نفس الوصول تمامًا مثل معدِّل الوصول المحمي.

فيما يلي أمثلة على استخدام معدّل الوصول المحمي:

protected int age; protected String getName(){ return "My Name is You"; }

معدِّلات الوصول في الفئات

بشكل افتراضي ، يمكن للفئات أن تحتوي على معدلين فقط:

  • عامة
  • لا يوجد معدل (معدل افتراضي)

إذن هذا يعني أنه لا يمكن ضبط الفصول على privateأو protected؟

هذا منطقي ، لماذا تريد أن تصنع فصل دراسي خاص؟ لن يتمكن أي فصل آخر من استخدامه. لكن في بعض الأحيان ، يمكنك تضمين فصل في فصل دراسي آخر. inner classesيمكن تعيين هذه الفئات الخاصة على "خاصة" أو "محمية" بحيث لا يتمكن من الوصول إليها إلا الطبقة المحيطة:

public class Car { private String brand; private Engine engine; // ... private class Engine { // ... } }

في المثال أعلاه ، Carيمكن للفصل فقط استخدام Engineالفصل. يمكن أن يكون هذا مفيدًا في بعض الحالات.

لا يمكن أبدًا تعيين الفئات الأخرى على protectedأو private، لأنه لا معنى لها. و protectedصول معدل يستخدم في صنع الأشياء package-privateولكن مع خيار لتكون في متناول الفئات الفرعية. لا يوجد مفهوم مثل "الحزم الفرعية" أو "توريث الحزم" في جافا.