جاري التحميل...

الفئات المجردة في Java

ضع علامة abstract على فئة الوالد عندما يجب أن تترك متدًا واحدًا على الأقل بلا جسم ليملأه الأبناء. اكتب abstract class Machine مع abstract void horn(); ومتد عادي park يطبع park. اكتب class Truck extends Machine وأعطِ horn جسمًا يطبع honk. في Yard.java ابنِ Truck، نادِ t.horn()، ثم نادِ t.park(). ترجم بـ javac Yard.java وشغّل java Yard. يجب أن تُظهر الشاشة honk ثم park. عرض ثانٍ يضيف Car حتى يملأ ابنان horn بطريقتين مختلفتين. اترك polymorphism للصفحة التالية — هذا الدرس هو متد الوالد غير المكتمل والابن الذي يُنهيه.

املأ المتد المجرد على الابن

صفحة الـ enum سردت أسماء ثابتة. هذه الصفحة تترك متدًا غير مكتمل عمدًا. افتح Yard.java. أبقِ اسم الفئة العامة Yard. احذف عروض enum Level المتبقية إن دفنت قصة abstract، وملفات Signal / implements، وعروض المسار، وأي Scanner للوحة المفاتيح. لا ينتظر البرنامج الكتابة. لا تحتاج سطر import.
أعلن الوالد المجرد فوق الأنواع الأخرى:
abstract class Machine {
abstract void horn();
void park() {
System.out.println("park");
}
}
ينتهي المتد المجرد بفاصلة منقوطة وليس له جسم { }. المتد العادي park يحتفظ بجسم كامل حتى يعيد كل ابن استخدامه.
أعلن الابن بـ extends Machine. املأ horn:
void horn() {
System.out.println("honk");
}
يجب أن تملأ كل متد abstract مدرج على الوالد. في هذه الصفحة ذلك هو horn فقط. لا تكتب new Machine() داخل main — الفئة المجردة لا تُبنى كائنًا بمفردها.
داخل Yard.main:
Truck t = new Truck();
t.horn();
t.park();
الاستدعاء الأول يشغّل الجسم على Truck. الاستدعاء الثاني يشغّل الجسم المشترك على Machine.

Yard Truck fills abstract horn then park

java
abstract class Machine {
    abstract void horn();
    void park() {
        System.out.println("park");
    }
}

class Truck extends Machine {
    void horn() {
        System.out.println("honk");
    }
}

public class Yard {
    public static void main(String[] args) {
        Truck t = new Truck();
        t.horn();
        t.park();
    }
}

من المجلد الذي يحوي Yard.java شغّل javac Yard.java. عندما تتطابق الأقواس والأقواس المعقوفة والفواصل المنقوطة، لا يكتب javac سطرًا خاصًا به. ثم شغّل java Yard — وليس java Yard.java. اترك لاحقة .java خارج أمر التشغيل. أبقِ فئة عامة واحدة في الملف ليطابق الاسم Yard. النوعان المساعدان Machine و Truck يبقيان بلا public في هذا الشكل للمبتدئين.
الشاشة تُظهر honk ثم park. امشِ التشغيل مرة. يبدأ Java من Yard.main. new Truck() يبني شاحنة أنهت horn المجرد. t.horn() يطبع honk. t.park() يطبع park من جسم الوالد الذي كان موجودًا مسبقًا. عاش المتد غير المكتمل كشرط فقط حتى كتب الابن الجسم.
إذا رفض javac، تحقق من ثلاثة أمور. أولًا، سطر فئة الوالد يجب أن يقول abstract class Machine. ثانيًا، المتد غير المكتمل يجب أن يقول abstract وينتهي بـ ;. ثالثًا، يجب أن يكتب Truck فعلًا horn بجسم. إذا ما زلت ترى MEDIUM من ملف enum، انتقل إلى ملف تعليم abstract وشغّل java Yard مجددًا. إذا جرّبت new Machine()، يرفض javac — وهذا متوقع في هذه الصفحة.
قل القاعدة بصوت عالٍ وأنت تراقب الشاشة: الوالد المجرد يسمّي المتد الناقص، الابن يملأه، المتدات المشتركة ما زالت تعمل. لا تخترع عرض polymorphism طويلًا بمتغيرات typed للوالد بعد. تلك القصة تنتظر الدرس التالي.

ابنان يملآن horn بطريقتين مختلفتين

برنامج ثانٍ يحتفظ بنفس Machine المجردة. Truck ما زال يطبع honk. Car جديد يطبع beep. main يبني الاثنين، ينادي كل horn، ثم ينادي park على الشاحنة.

Yard Truck and Car fill horn then park

java
abstract class Machine {
    abstract void horn();
    void park() {
        System.out.println("park");
    }
}

class Truck extends Machine {
    void horn() {
        System.out.println("honk");
    }
}

class Car extends Machine {
    void horn() {
        System.out.println("beep");
    }
}

public class Yard {
    public static void main(String[] args) {
        Truck t = new Truck();
        Car c = new Car();
        t.horn();
        c.horn();
        t.park();
    }
}

ترجم بـ javac Yard.java، ثم شغّل java Yard. الشاشة تُظهر honk ثم beep ثم park. كل ابن ملأ نفس الاسم المجرد بطباعته الخاصة. جسم park المشترك ما زال يأتي من Machine. ما زلت لا تكتب new Machine() أبدًا.
اقرأ الوالد مرة أخرى: متد abstract واحد، ومتد عادي واحد. اقرأ الأبناء: كل منهم يكتب horn، ولا أحد يعيد كتابة park في هذه الصفحة. ذلك الانقسام هو نقطة التعليم. إذا أغفلت horn على Car بينما Car extends Machine، يرفض javac لأن كل متد abstract يجب أن يُملأ.
إذا بقيت عروض enum قريبة، احتفظ بها كتاريخ. لهذا الدرس شغّل ملف تعليم abstract حتى تُظهر الشاشة ملء المتدات لا MEDIUM. إذا اشتكى javac من فئات عامة مكررة، أبقِ Yard وحدها عامة.

مقارنة مع الـ enum والواجهات

في صفحة الـ enum سرد Level أسماء ثابتة. في صفحة الواجهات ملأ implements متدات الواجهة الفارغة. في هذه الصفحة يترك abstract class مع extends متد فئة غير مكتمل حتى يكتب الابن الجسم. ما زلت تترجم Yard.java وتشغّل java Yard. الرموز الجديدة هي abstract class و abstract void horn(); وابن يوفّر الجسم ويعيد استخدام park.
إذا كان ملف enum Level ما زال مفتوحًا، سترى ثوابت وربما switch. انتقل إلى ملف abstract حتى يُظهر الأعلى abstract class Machine ويبني main كائن Truck. أبقِ عروض polymorphism التي تنقل فقط متغيرات typed للوالد خارج هذه الصفحة. أبقِ إدخال لوحة المفاتيح خارج هذه الصفحة.

ماذا تترك هذه الصفحة لـ polymorphism

هذه الصفحة تُنهي المتدات المجردة على أبناء ملموسين. الصفحة التالية تُظهر polymorphism، حيث يمكن لمتغير typed للوالد أن يحمل كائنات أبناء مختلفة وينادي الجسم المطابق. ابقَ هنا مع الآباء المجردين والأبناء المملوءين. لا تطلب بعد قائمة متغيرات Machine تشير إلى أبناء كثيرين.
عندما تكتب لاحقًا عروض polymorphism، ستبدأ غالبًا من اسم متد والد مجرد أو عادي. اعتبر هذه الصفحة نصف المتد غير المكتمل لتلك القصة المجاورة. أتمم عرضي Yard حتى يصبح honk ثم park — ثم honk و beep و park — تلقائيًا قبل أن تفتح درس polymorphism.

قبل polymorphism

يمكنك إعلان abstract class Machine، وملء horn على Truck، ورؤية honk ثم park. يمكنك إضافة Car مع horn الخاص به ورؤية honk ثم beep ثم park. ترجم Yard.java وشغّل java Yard لكل عرض تحتفظ به بدوره. الابن أنهى المتد المجرد. الصفحة التالية هي polymorphism، حيث تختار الاستدعاءات عبر مرجع typed للوالد جسم الابن.
أبقِ عرض الشاحنة الواحدة لملء abstract واضح مع park المشترك. أبقِ عرض الابنين لزوج واضح من الملء. أبقِ ملفات عرض polymorphism خارج هذه الصفحة. تلك العادات الثلاث هي نقطة التحقق قبل أن تتقدم. عندما يظهر honk قبل park بعد new Truck()، أدّت الفئات المجردة عملها لهذا الدرس وأنت جاهز للموضوع التالي عن polymorphism.
مرور أخير على المجلد: Yard عامة واحدة، Machine مجردة واحدة، أبناء ملموسون يملؤون horn، بلا new Machine()، بلا انتظار لوحة المفاتيح. شغّل javac Yard.java و java Yard مرة أخرى على العرض الذي تبقيه مفتوحًا. إذا ما زالت الشاشة تطبع الملء الذي كتبته، فعقد abstract متين ويمكن للدورة الانتقال إلى polymorphism في الصفحة التالية.

🧠 اختبر معرفتك

جاهز للبدء

اختبر معرفتك

تحدى نفسك مع هذا الاختبار التفاعلي واكتشف مدى فهمك للموضوع

❓
6
الأسئلة
🎯
70%
للنجاح
♾️
∞
الوقت
🔄
∞
المحاولات

📝 التعليمات

  • اقرأ كل سؤال بعناية
  • اختر أفضل إجابة لكل سؤال
  • يمكنك إعادة الاختبار عدة مرات كما تريد
  • سيتم عرض تقدمك في الأعلى