الوصول إلى متغيرات الأمثلة الخاصة للوالدين من فئة الطفل؟

StackOverflow https://stackoverflow.com/questions/822648

سؤال

دعنا نقول أن لدينا فصل foo الذي لديه متغير مثيل خاص bar.

الآن دعونا نحصل على فصل آخر ، baz, ، أيّ extends foo. يمكن أن تكون الأساليب غير المنتظمة في baz التمكن من fooمتغير bar إذا لم يكن هناك طريقة ملحق محددة في foo?

أنا أعمل في جافا ، بالمناسبة.

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

المحلول

لا ، ليس حسب مواصفات لغة جافا ، الطبعة الثالثة:

6.6.8 مثال: الحقول الخاصة والأساليب والمشاركات

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

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

Field privateStringField = 
   MyClass.class.getDeclaredField("privateString");
privateStringField.setAccessible(true);

String fieldValue = (String) privateStringField.get(privateObject);
System.out.println("fieldValue = " + fieldValue);

نصائح أخرى

لا ، لذلك يجب أن تستخدم protected.

للحصول على أسئلة كهذه ، أين يوجد جدول موجود على الموقع هنا: http://java.sun.com/docs/books/tutorial/java/javaoo/accesscontrol.html

في الأساس ، تريد إعلان المتغير العام أو المحمي في FOO لأن هذه هي المتغيرات التي ترثها الفئات الفرعية من والديها وبالتالي يتم رؤيتها في BAZ.

لا يمكن لفصول الأطفال الوصول إلى أعضاء القطاع الخاص (وهو بيت القصيد من التحكم في الوصول الخاص).

... إذا لم يكن هناك طريقة ملحق محددة في فو؟

تحتاج إلى ملحقات. علاوة على ذلك ، اعتني بالميراث ، هل يجب أن يكون هذا var في الوالدين؟ تذكر is-a check ..

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

لاستخدام متغير خاص لفئة فائقة في فئة فرعية ، يلزم وجود طريقة ملحق. آخر استخدام المعدل المحمي بدلاً من الخاص.

المتغير الخاص (المتغيرات) الخاصة للفئة لديه دائمًا نطاق داخل تلك الفئة. إذا كان لا بد من مشاركتها بين الفئات الفرعية ، فيجب إعلان "حماية"

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