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

تعدد الأشكال في Java

خزّن كائنات مختلفة في متغير typed من نوع الوالد حتى يستطيع اسم استدعاء واحد تشغيل أجسام مختلفة. أبقِ horn على Machine ليطبع tone. على Truck أعد كتابة horn ليطبع honk. على Car أعد كتابة horn ليطبع beep. في Yard.java اكتب Machine m = new Machine(); وMachine t = new Truck(); وMachine c = new Car();، ثم نادِ horn على كل منها. ترجم بـ javac Yard.java وشغّل java Yard. يجب أن تُظهر الشاشة tone ثم honk ثم beep. عرض ثانٍ يُبقي الابنين فقط كمرجعين من نوع Machine. اترك equals للصفحة التالية — هذا الدرس نوع والد واحد يحمل أشكالًا كثيرة.

نوع والد واحد، ثلاثة أجسام لـ horn

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

Yard Machine Truck Car horn polymorphism

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

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) {
        Machine m = new Machine();
        Machine t = new Truck();
        Machine c = new Car();
        m.horn();
        t.horn();
        c.horn();
    }
}

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

ابنان عبر مراجع Machine

البرنامج الثاني يُبقي التجاوزات. main يبني فقط Truck وCar، ما زالا مخزّنين كـ Machine، وينادي horn على كل منهما.

Yard Truck and Car as Machine refs

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

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) {
        Machine t = new Truck();
        Machine c = new Car();
        t.horn();
        c.horn();
    }
}

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

أي جسم لـ horn يعمل

📊 Who runs for each Machine variable

Variable Real object horn prints
m Machine tone
t Truck honk
c Car beep

مقارنة بملء abstract

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

قبل equals

يمكنك تعيين متغيرات Machine لكائنات Machine وTruck وCar ورؤية tone ثم honk ثم beep. يمكنك إبقاء الابنين فقط كمراجع Machine ورؤية honk ثم beep. ترجم Yard.java وشغّل java Yard لكل عرض تحتفظ به على حدة. الاستدعاء استخدم مالك الجسم. الصفحة التالية هي equals، حيث يُقارن كائنان للتماثل بطريقة آمنة للتدريس.
أبقِ عرض الكائنات الثلاثة لشاشة واضحة للوالد مع الأبناء. أبقِ عرض الابنين لزوج واضح typed والد. أبقِ ملفات equals خارج هذه الصفحة. هذه العادات الثلاث هي نقطة التحقق قبل المتابعة. عندما يظهر honk من متغير شاحنة typed كـ Machine، أنجز polymorphism عمل هذا الدرس وأنت جاهز للموضوع التالي عن equals.
مرور أخير على المجلد: Yard عامة واحدة، أجسام horn للوالد والابن، متغيرات typed والد في main، بلا انتظار لوحة مفاتيح، بلا إجبار على equals. شغّل javac Yard.java وjava Yard مرة أخرى على العرض المفتوح. إن طابقت الشاشة الجدول، فاستدعاء الأشكال الكثيرة ثابت ويمكن للدورة الانتقال إلى equals في الصفحة التالية.

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

جاهز للبدء

اختبر معرفتك

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

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

📝 التعليمات

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