سؤال

ما الفرق في إمكانية الوصول إلى المتغيرات التالية في Java؟

public class Joe {
    public int a;
    protected int b;
    private int b;
    int c;
}

أنا مهتم أكثر بما يفعله الأخير.

هل كانت مفيدة؟

المحلول

  • عام:القراءة/الكتابة لأي شخص
  • محمي:مقروءة / قابلة للكتابة ل مثيلات الفئات الفرعية ومن داخل الحزمة المرفقة
  • خاص:قراءة/للكتابة ل أي مثيل الفئة والمثيل الداخلي أو الخارجي (المغلق)
  • كثافة العمليات ج :حزمة خاصة ، قابلة للقراءة / الكتابة ل جميع الدروس داخل نفس الباقة

انظر JLS لمزيد من التفاصيل

يحرر:تمت إضافة تعليق محمي يفيد بأنه يتم منح الوصول من داخل نفس الحزمة، أنتم يا رفاق على حق تمامًا.وأضاف أيضا تعليق خاص.أتذكر الآن...؛-)

نصائح أخرى

آسف للإجابة على التصحيحات في إجابة واحدة سابقة ولكن ليس لدي سمعة كافية لتعديلها مباشرة ...

  • عام - للقراءة/الكتابة لأي شخص
  • محمي - للقراءة / الكتابة ل الفئات الفرعية للمثيلات وجميع الفئات داخل نفس الحزمة
  • كثافة العمليات ج :حزمة خاصة, مقروءة / قابلة للكتابة لجميع الفصول بالداخل نفس الباقة
  • خاص - للقراءة/الكتابة لأي عضو في تلك الفئة نفسها والطبقات الداخلية (إن وجدت)

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

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

أحاول تجنب الوصول إلى مستوى الحزمة تمامًا (آخر وصول ذكرته).

أحب أن أبقي الفصول الدراسية قائمة بذاتها.إذا احتاج فصل آخر إلى الوصول إلى شيء ما في صفي، فيجب أن يكون عامًا (ويجب أن يكون عن طريق طريقة، وليس سمة).وإلا أشعر أنك قد كسرت التغليف, ، كما هو موضح في التجريد مقابل إخفاء المعلومات مقابل التغليف.

وكل هذه إجراءات حماية وقت الترجمة، ويمكن تجاوزها بسهولة من خلال التفكير في وقت التشغيل.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top