مستوى الوصول في Java
اكتب فئة Gate في Gate.java بحقل private int اسمه code، ومُنشئ Gate(int n) يضع code = n;، ومتد void show() يطبع code. في Pier.java ابنِ بوابة واحدة بـ Gate g = new Gate(9);، ثم استدعِ g.show();. ترجم الملفين ونفّذ java Pier. يجب أن تظهر الشاشة سطرًا واحدًا: 9. الحقل مخفي عن Pier. المتد على Gate ما زال يستطيع قراءته. وضع private على الحقل هو ما تعلّمه هذه الصفحة.
حقل لا يجب أن يسمّيه Pier مباشرة
حتى الآن غالبًا استطاعت فئات أخرى في المجلد نفسه الوصول إلى حقول مثل j.fill أو t.size حين لم يكن لتلك الحقول كلمة وصول. كلمة private تغيّر ذلك. حقل private يخص الفئة التي تعلنه. المتدات داخل الفئة نفسها قد تستخدم الحقل. فئة مختلفة — هنا Pier — لا يجب أن تكتب g.code.
أنشئ Gate.java أولًا. سطر public class هو public class Gate. لا تُبقِ اسم فئة قديمًا Tag أو Jar هنا. داخل الأقواس المجعدة أعلن private int code;. اكتب المُنشئ Gate(int n) { code = n; } بأسماء مختلفة حتى لا تحتاج هذه الصفحة إلى this. ثم اكتب:
void show() { System.out.println(code); }
لا يوجد main في Gate.java. احفظ قبل الترجمة. المتد show يجلس في الفئة نفسها مع code، لذا قد يقرأ الحقل private. هذا هو المسار المسموح على هذه الصفحة.
public class Gate {
private int code;
Gate(int n) {
code = n;
}
void show() {
System.out.println(code);
}
}
Pier يستدعي show لا g.code
أنشئ Pier.java في المجلد نفسه. سطر public class هو public class Pier. داخل main اكتب Gate g = new Gate(9); ثم g.show();. لا تكتب System.out.println(g.code); على هذه الصفحة. إذا حاولت g.code من Pier بينما code من نوع private، يرفض javac.
أبقِ Pier الفئة التي تحمل main. لا تضع main داخل Gate لهذا الدرس. إذا بقي ملف Yard من صفحة static في المجلد، لا تشغّل java Yard لهذا الدرس — نفّذ java Pier بعد ترجمة Gate.java وPier.java.
public class Pier {
public static void main(String[] args) {
Gate g = new Gate(9);
g.show();
}
}
من المجلد الذي يحوي الملفين، نفّذ javac Gate.java Pier.java. يمكنك ترجمة Gate.java أولًا ثم Pier.java عندما يكتمل الاثنان. عندما تتطابق الأقواس والدعامات والفواصل المنقوطة، لا يكتب javac سطرًا من عنده. ثم نفّذ java Pier — لا java Pier.java، ولا java Gate. احذف نهاية .java من أمر التشغيل. ابدأ الفئة التي تحمل main. الأوامر نفسها تعمل على Windows وعلى macOS.
يجب أن يطبع البرنامج سطرًا واحدًا ويتوقف: 9. لا يطلب منك الكتابة. إذا انتظر الطرفية إدخال لوحة المفاتيح، فما زال استدعاء nextLine من تمرين أقدم في أحد الملفات. احذف ذلك الاستدعاء وأبقِ new Gate(9) مع g.show(); في Pier، مع private int code في Gate.
امشِ التشغيل مرة. تبدأ Java من Pier.main. التعبير new Gate(9) يبني بوابة ويخزّن 9 في code داخل المُنشئ. الاستدعاء g.show() يدخل show على ذلك الكائن نفسه. داخل Gate، يستطيع show قراءة code ويطبع 9. لم يسمِّ Pier الحقل أبدًا. تظهر الشاشة 9.
إذا كتبت System.out.println(g.code); في Pier بدل g.show();، يتوقف javac بخطأ وصول بينما code من نوع private. ذلك الرفض هو نقطة هذه الصفحة. أعد g.show();.
مقارنة مع static ومع الحقول المفتوحة
على صفحة static استدعيت Tag.ping(); بلا حقل كائن لإخفائه. ذلك ما زال يعمل. هذه الصفحة تخفي حقلًا وتفتح متدًا. عرض متبقٍ Tag.ping(); درس مختلف. لهذه الصفحة أبقِ Gate وPier وg.show();.
الصفحات السابقة غالبًا تركت الحقول بلا private، فترجم j.fill من فئة أخرى. ذلك الشكل الأرخى ما زال يظهر في عروض صغيرة. هذا الدرس يختار private عمدًا حتى ترى الحد. طباعة g وحده بـ System.out.println(g); لا تُظهر 9 نظيفًا. استدعِ g.show(); أو اطبع عبر متد تسمح به الفئة.
بوابتان، رمزان
كل new Gate(...) يحتفظ بـ code private خاص به. يمكنك كتابة Gate a = new Gate(2); وGate b = new Gate(8);، ثم استدعاء a.show(); وb.show();.
public class Pier {
public static void main(String[] args) {
Gate a = new Gate(2);
Gate b = new Gate(8);
a.show();
b.show();
}
}
ترجم وشغّل مجددًا: javac Gate.java Pier.java، ثم java Pier. يجب أن تظهر الشاشة 2 على سطر و8 على السطر التالي. كل استدعاء show جرى على كائنه وقرأ الحقل private لذلك الكائن. كتابة Gate b = a; لا تبني كائنًا ثانيًا — استخدم استدعائي new Gate(...) حين تريد رمزين.
إذا أظهر السطران الرقم نفسه، تحقق أن كل new يمرّر وسيطًا مختلفًا. إذا اشتكى javac من code داخل Pier، فما زال لديك سطر g.code مباشر — احذفه وأبقِ show.
ما يبقى لـ packages
هذه الصفحة تبقي الملفين في المجلد نفسه بتخطيط الحزمة الافتراضي. صفحة لاحقة — packages — تضع الفئات في مجلدات مسماة بخطوط package. ابقَ هنا مع private وshow. لا تخترع جدول public/protected كاملًا على هذه الصفحة؛ هدف الدرس حقل private واحد ومتد ما زال يستطيع قراءته.
إذا لم يجد javac فئة Gate أثناء ترجمة Pier.java، تحقق أن Gate.java في المجلد نفسه وأن سطر الفئة public class Gate. حين يحوي المجلد بعدُ Tag.java أو Yard.java، اتركهما أو احذفهما فقط إن أربكا أمر الترجمة. نفّذ java Pier بعد ترجمة زوج Gate وPier من هذا الدرس.
قبل packages
يمكنك إعلان private int code;، وكتابة Gate(int n) { code = n; } وvoid show() { System.out.println(code); }، ومن Pier تشغيل Gate g = new Gate(9); ثم g.show();. ترجم الملفين ونفّذ java Pier. تظهر الشاشة 9. بقي الحقل private داخل Gate. متد الفئة نفسها طبعه. الصفحة التالية هي packages، حيث تضع الفئات في مجلدات حزم مسماة.
أبقِ private على الحقل. أبقِ الطباعة داخل show، لا كـ g.code من Pier. أبقِ main في Pier. هذه العادات الثلاث هي نقطة التحقق لهذه الصفحة قبل أن تنتقل. حين تظهر الشاشة 9 عبر show، تكون قد عبرت حد الوصول كما يقصد هذا الدرس.
🧠 اختبر معرفتك
اختبر معرفتك
تحدى نفسك مع هذا الاختبار التفاعلي واكتشف مدى فهمك للموضوع
📝 التعليمات
- اقرأ كل سؤال بعناية
- اختر أفضل إجابة لكل سؤال
- يمكنك إعادة الاختبار عدة مرات كما تريد
- سيتم عرض تقدمك في الأعلى