متد الكائن في Java
اكتب فئة Jar في Jar.java بحقل int اسمه fill، ومُنشئ Jar(int n) يضع fill = n;، ومتد كائن void bump() ينفّذ fill = fill + 1;. في Desk.java ابنِ jar واحدًا بـ Jar j = new Jar(3);، استدعِ j.bump();، ثم اطبع j.fill. ترجم الملفين ونفّذ java Desk. يجب أن تظهر الشاشة سطرًا واحدًا: 4. المتد يعمل على ذلك الكائن الواحد ويغيّر حقله. استدعاء المتد عبر متغير الكائن هو ما تعلّمه هذه الصفحة.
متد ينتمي إلى الكائن
في صفحات المتدات السابقة استدعيت اسمًا من main بلا كائن أمامه. هنا المتد يقع على الفئة، لكنك تصل إليه عبر متغير jar: j.bump(). ذلك الاستدعاء يستخدم حقول الـ jar الذي يسمّيه j. jar ثانٍ يحتفظ بـ fill الخاص به.
أنشئ Jar.java أولًا. سطر public class هو public class Jar. لا تُبقِ اسم فئة قديمًا Tin أو Box هنا. داخل الأقواس المجعدة أعلن int fill;. اكتب المُنشئ Jar(int n) { fill = n; } بأسماء مختلفة حتى لا تحتاج هذه الصفحة إلى this. ثم اكتب متد الكائن:
void bump() { fill = fill + 1; }
لا يوجد main في Jar.java. احفظ قبل الترجمة. رأس المتد يحتاج void لأن bump لا يُرجع قيمة للطباعة. المُنشئ ما زال بلا void — أبقِ هذا الفرق واضحًا.
public class Jar {
int fill;
Jar(int n) {
fill = n;
}
void bump() {
fill = fill + 1;
}
}
Desk يبني jar ويستدعي bump
أنشئ Desk.java في المجلد نفسه. سطر public class هو public class Desk. داخل main اكتب ثلاثة أسطر بالترتيب: Jar j = new Jar(3);، ثم j.bump();، ثم System.out.println(j.fill);. المُنشئ يخزّن 3. الاستدعاء j.bump() يضيف واحدًا. الطباعة تُظهر القيمة الجديدة.
أبقِ Desk الفئة التي تحمل main. لا تضع main داخل Jar لهذا الدرس. إذا بقي ملف Lab من صفحة this في المجلد، لا تشغّل java Lab لهذا الدرس — نفّذ java Desk بعد ترجمة Jar.java وDesk.java.
public class Desk {
public static void main(String[] args) {
Jar j = new Jar(3);
j.bump();
System.out.println(j.fill);
}
}
من المجلد الذي يحوي الملفين، نفّذ javac Jar.java Desk.java. يمكنك ترجمة Jar.java أولًا ثم Desk.java عندما يكتمل الاثنان. عندما تتطابق الأقواس والدعامات والفواصل المنقوطة، لا يكتب javac سطرًا من عنده. ثم نفّذ java Desk — لا java Desk.java، ولا java Jar. احذف نهاية .java من أمر التشغيل. ابدأ الفئة التي تحمل main. الأوامر نفسها تعمل على Windows وعلى macOS.
يجب أن يطبع البرنامج سطرًا واحدًا ويتوقف: 4. لا يطلب منك الكتابة. إذا انتظر الطرفية إدخال لوحة المفاتيح، فما زال استدعاء nextLine من تمرين أقدم في أحد الملفات. احذف ذلك الاستدعاء وأبقِ new Jar(3) وj.bump() والطباعة في Desk، مع bump في Jar.
امشِ التشغيل مرة. تبدأ Java من Desk.main. العبارة new Jar(3) تبني jar وتخزّن 3 في fill. الاستدعاء j.bump() يدخل bump على ذلك الكائن نفسه. الجسم يكتب fill = fill + 1، فيصبح fill يساوي 4. ثم يطبع main قيمة j.fill وتظهر الشاشة 4.
إذا كتبت bump(); بلا j. أمامه، يرفض javac في هذا الشكل من main. متد الكائن يحتاج كائنًا. إذا كتبت Jar.bump(); كأنّه استدعاء static، فتلك فكرة الدرس التالي — لا هذه الصفحة. أبقِ j.bump();.
مقارنة مع this ومع إسناد الحقل مباشرة
في صفحة this خزّنت حقلًا داخل المُنشئ بأسماء متطابقة. ذلك ما زال يعمل. هذه الصفحة تضيف متدًا يمكنك استدعاءه لاحقًا بعد أن يوجد الكائن. عرض متبقٍ Tin t = new Tin(7); مع this.size = size; درس مختلف. لهذه الصفحة أبقِ Jar وDesk وj.bump();.
ما زال بإمكانك كتابة j.fill = j.fill + 1; في main. هذا الدرس ينقل ذلك التغيير إلى bump حتى يحمل الكائن الفعل. طباعة j وحده بـ System.out.println(j); لا تُظهر 4 نظيفًا. اطبع j.fill لترى الرقم المخزَّن.
bumpان على jar واحد
يمكنك استدعاء j.bump(); مرتين قبل الطباعة. ابدأ بـ new Jar(3)، bump مرة إلى 4، bump ثانية إلى 5، ثم اطبع. ذلك الفحص يناسب عرض Desk صغيرًا ثانيًا.
public class Desk {
public static void main(String[] args) {
Jar j = new Jar(3);
j.bump();
j.bump();
System.out.println(j.fill);
}
}
ترجم ونفّذ من جديد: javac Jar.java Desk.java، ثم java Desk. يجب أن تظهر الشاشة 5. كل استدعاء لـ bump جرى على الكائن نفسه وأضاف واحدًا آخر. كتابة Jar k = j; لا تبني كائنًا ثانيًا — استخدم استدعاءَي new Jar(...) حين تريد قيمتَي fill منفصلتين. لهذه الصفحة يكفي bumpان على jar واحد لترى المتد يعمل مرتين.
إذا ما زالت الشاشة تُظهر 3، فربما نُقصَت استدعاءات bump أو ما زال main يطبع قبل استدعائها. إذا ظهرت 7 أو رقم متبقٍ آخر، فربما بقي عرض Tin قديم في الملف. أبقِ new Jar(3) واستدعاءات bump.
ما يبقى لـ static
هذه الصفحة تستدعي المتد عبر كائن: j.bump(). صفحة لاحقة — static — تُظهر متدات وحقولًا تنتمي إلى اسم الفئة نفسه بلا كائن أمامه. ابقَ هنا مع استدعاء الكائن. لا تخترع static void bump() على هذه الصفحة إلا إن كنت تعرفه مسبقًا؛ هدف الدرس هو الاستدعاء على الكائن.
إذا لم يجد javac الفئة Jar أثناء ترجمة Desk.java، تحقق أن Jar.java في المجلد نفسه وأن سطر الفئة هو public class Jar. إذا أظهرت الشاشة 0، فربما يفتقد المُنشئ التخزين، أو لم يعمل bump أصلًا — أبقِ Jar(int n) { fill = n; } وj.bump(); قبل الطباعة.
حين يبقى في المجلد Tin.java أو Lab.java من صفحة this، اتركهما أو احذفهما فقط إن أربكا أمر الترجمة. نفّذ java Desk بعد ترجمة زوج Jar وDesk من هذا الدرس.
قبل static
يمكنك إعلان int fill;، وكتابة Jar(int n) { fill = n; } وvoid bump() { fill = fill + 1; }، ومن Desk تشغيل Jar j = new Jar(3); وj.bump(); ثم طباعة j.fill. ترجم الملفين ونفّذ java Desk. تظهر الشاشة 4. عمل متد الكائن على ذلك الكائن وغيّر حقله. الصفحة التالية هي static، حيث تنتمي بعض الأعضاء إلى اسم الفئة بلا حاجة إلى متغير كائن أمامه.
أبقِ void على المتد لا على المُنشئ. أبقِ الكائن قبل الاستدعاء: j.bump();. أبقِ الطباعة على j.fill. هذه العادات الثلاث هي نقطة التحقق لهذه الصفحة قبل أن تنتقل.
🧠 اختبر معرفتك
اختبر معرفتك
تحدى نفسك مع هذا الاختبار التفاعلي واكتشف مدى فهمك للموضوع
📝 التعليمات
- اقرأ كل سؤال بعناية
- اختر أفضل إجابة لكل سؤال
- يمكنك إعادة الاختبار عدة مرات كما تريد
- سيتم عرض تقدمك في الأعلى