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

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

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

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

معدّلات الوصول في Java-1معدّلات الوصول في 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معدل الوصول

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

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


إنشاء اختبار