logo

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

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

هناك 4 أنواع من معدّلات الوصول المتوفرة في Java: 

معدّلات الوصول في Java-1' title=معدّلات الوصول في Java

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

يتم تحديد معدّل الوصول الخاص باستخدام الكلمة الأساسية "خاص". لا يمكن الوصول إلى الأساليب أو أعضاء البيانات الذين تم الإعلان عنهم على أنهم خاصون إلا داخل الفئة التي تم الإعلان عنهم فيها.



Java
class Person {  // private variable  private String name;  public void setName(String name) {  this.name = name; // accessible within class  }  public String getName() { return name; } } public class Geeks {  public static void main(String[] args)  {  Person p = new Person();  p.setName('Alice');  // System.out.println(p.name); // Error: 'name'  // has private access  System.out.println(p.getName());  } } 

الإخراج
Alice 

توضيح: غير مسموح بالوصول المباشر إلى الاسم خارج تغليف الشخص الذي يفرض.

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

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

Java
class Car {  String model; // default access } public class Main {    public static void main(String[] args){    Car c = new Car();  c.model = 'Tesla'; // accessible within the same package  System.out.println(c.model);  } } 

الإخراج
Tesla 

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

المهوسون جافا: الفئة الافتراضية داخل نفس الحزمة

Java
// default access modifier  package p1;  // Class Geek is having  // Default access modifier  class Geek  {   void display()   {   System.out.println('Hello World!');   }  } 

GeeksNew.java: الفئة الافتراضية من حزمة مختلفة (للتباين)

C++
// package with default modifier  package p2;  import p1.*; // importing package p1 // This class is having  // default access modifier  class GeekNew {   public static void main(String args[]) {     // Accessing class Geek from package p1   Geek o = new Geek();   o.display();   }  } 

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

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

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

Java
class Vehicle {  protected int speed; // protected member } class Bike extends Vehicle {  void setSpeed(int s)  {  speed = s; // accessible in subclass  }  int getSpeed()  {  return speed; // accessible in subclass  } } public class Main {  public static void main(String[] args){    Bike b = new Bike();  b.setSpeed(100);  System.out.println('Access via subclass method: '  + b.getSpeed());  Vehicle v = new Vehicle();  System.out.println(v.speed);  } } 

الإخراج
Access via subclass method: 100 0 

توضيح: يمكن الوصول إلى السرعة عبر أساليب الفئات الفرعية والفئات الأخرى في نفس الحزمة ولكن الوصول المباشر من حزمة مختلفة (غير فئة فرعية) قد يفشل.

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

يتم تحديد معدّل الوصول العام باستخدام الكلمة الأساسية public. يمكن الوصول إلى الأعضاء العامين من كل مكان في البرنامج. لا يوجد أي قيود على نطاق أعضاء البيانات العامة.

Java
class MathUtils {     public static int add(int a int b) {  return a + b;  } } public class Main {    public static void main(String[] args) {    System.out.println(MathUtils.add(5 10)); // accessible anywhere  } } 

الإخراج
15 

توضيح: يمكن الوصول إلى add() عالميًا بفضل المُعدِّل العام.

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

جدول مقارنة معدّلات الوصول في Java

Same_class' loading='lazy' title=معدل الوصول

متى يجب استخدام كل معدّل وصول في مشاريع العالم الحقيقي

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


إنشاء اختبار