تعدد الأشكال جافا
هناك نوعان من تعدد الأشكال:
(1) تعدد الأشكال في وقت التجميع (تعدد الأشكال وقت التصميم): الطريقة الزائدة.
(2) تعدد الأشكال وقت التشغيل: يقرر نظام وقت تشغيل Java الطريقة التي يمكن الاتصال بها بناءً على نوع المثيل الذي يستدعي الطريقة ، والتي تسمى تعدد الأشكال وقت التشغيل. (الأشياء التي نتحدث عنها عادة هي تعدد الأشكال في وقت التشغيل ، لذلك يشير تعدد الأشكال بشكل أساسي إلى تعدد الأشكال في وقت التشغيل)
ثلاثة شروط ضرورية لوجود تعدد الأشكال في وقت التشغيل:
1. يجب أن يكون هناك ميراث (بما في ذلك تنفيذ الواجهات) ؛
2. يجب إعادة كتابة.
3. يشير مرجع الفئة الأم إلى كائن فئة الطفل.
فوائد تعدد الأشكال:
1. استبدال. تعدد الأشكال قابلة للتبديل للرموز الموجودة. على سبيل المثال ، يعمل تعدد الأشكال على فئة دائرة الدائرة ، ويعمل أيضًا على أي هندسة دائرية أخرى ، مثل الدائرة.
2. التوسيع. تعدد الأشكال قابلة للتطوير للرمز. لا تؤثر إضافة فئات فرعية جديدة على تشغيل وتشغيل تعدد الأشكال والميراث والميراث والخصائص الأخرى. في الواقع ، من الأسهل الحصول على وظائف متعددة الأشكال عن طريق إضافة فئات فرعية جديدة. على سبيل المثال ، على أساس إدراك تعدد الأشكال للأقماع ، والنصاف ونصف الكرة ، من السهل إضافة تعدد الأشكال من المجالات.
3. يتم تحقيق تعدد الأشكال بواسطة فئات فائقة من خلال توقيعات الطريقة ، وتوفير واجهة مشتركة للمادة الفرعية ، ويتم تنفيذ الفئات الفرعية بواسطة فئات فرعية لتحسينها أو الكتابة فوقها. كما هو مبين في الشكل 8.3. في الشكل ، يحدد شكل الفئة الفائقة طريقتين للواجهة اللذين ينفذان تعدد الأشكال ، الحوسبة () و computevolume (). الفئات الفرعية ، مثل الدائرة والكرة ، تحسين أو تجاوز هاتين الواجهة من أجل تحقيق تعدد الأشكال.
4. المرونة. إنه يعكس عمليات مرنة ومتنوعة في التطبيقات ويحسن كفاءة الاستخدام.
5. البساطة. يعدد الأشكال تعدد عمليات كتابة البرامج والتعديل لبرامج التطبيق ، خاصة عند التعامل مع عمليات وعمليات عدد كبير من الكائنات ، هذه الميزة بارزة ومهمة بشكل خاص.
ملاحظة: الأولوية من عالية إلى منخفضة: this.show (o) ، super.show (o) ، this.show ((super) o) ، super.show ((super) o).
أسئلة المقابلة ذات الصلة:
Class A {public string show (d obj) .. {return ("A and D") ؛ } عرض السلسلة العامة (a obj) .. {return ("a and a") ؛ }} الفئة B يمتد عرض {public string (b obj) .. {return ("B and B") ؛ } show public show (a obj) .. {return ("b and a") ؛ }} class C يمتد B ... {} class d يمتد B ... {}(2) السؤال: ما هي نتائج الإخراج التالية؟
A1 = جديد A () ؛
a2 = جديد b () ؛
B B = New B () ؛
C C = جديد C () ؛
d d = new d () ؛
System.out.println (a1.show (b)) ؛ ①
system.out.println (a1.show (c)) ؛ ②
system.out.println (a1.show (d)) ؛ ③
system.out.println (a2.show (b)) ؛ ④
system.out.println (a2.show (c)) ؛ ⑤
system.out.println (a2.show (d)) ؛ ⑥
System.out.println (B.Show (b)) ؛ ⑦
System.out.println (B.Show (C)) ؛ ⑧
System.out.println (B.Show (D)) ؛ ⑨
(3) الإجابة
① A و A
② A و A
③ A و D
④ ب و أ
⑤ ب و أ
⑥ A و D
⑦ ب و ب
⑧ ب و ب
⑨ A و D
تحليل:
عند القيام بهذا النوع من الأسئلة ، يجب عليك دائمًا استخدام ترتيب الأولوية:
للسؤال الأول:
A1 هو كائن تم إنشاء مثيل له من الفئة A ، لذلك يشير هذا إلى A ، ثم يبحث عن this.show (B). نظرًا لعدم وجود طريقة ، فإنه يذهب إلى Super.show (ب). ومع ذلك ، نظرًا لأن الفئة A ليس لها فئة فائقة ، فإنها تذهب إلى هذا. Show (Super B). نظرًا لأن فئة B Superclass هي A ، فهي تعادل هذا. Show (A). بعد ذلك ، تم العثور على هذه الطريقة في الفئة A ، لذلك يتم إخراج A و A.
للسؤال 2:
وبالمثل ، فإن A1 هو كائن تم تأسيسه من الفئة A ، لذلك يشير هذا إلى A ، ثم البحث عن طريقة (C) في الفئة A. نظرًا لعدم وجود مثل هذه الطريقة ، أذهب إلى Super.show (C). بما أنني أبحث عن هذا في الفئة الفائقة من الفئة A ، لكن A ليس لديه فئة فائقة ، لذلك أذهب إلى هذا. نظرًا لأن فئة C Superclass هي B ، فإنني أبحث عن هذا. Show (B) الطريقة في الفئة A ، ولم أجدها. بعد ذلك ، يحتوي B أيضًا على فئة فائقة ، وهي A ، لذلك أبحث عن This.Show (A) ، ووجدتها ، لذلك أخرج A و A ؛
للسؤال 3:
وبالمثل ، فإن A1 هو كائن تم إنشاؤه من الفئة A ، لذلك يشير هذا إلى A ، ثم ابحث عن طريقة (D) في الفئة A ، ويوجد ، لذلك A و D مخرجات ؛
للسؤال 4:
A2 هو كائن مرجعي للفئة B ، مع النوع A ، لذلك يشير هذا إلى الفئة A ، ثم ابحث عن طريقة (B) في الفئة A ، لكنها غير موجودة ، لذلك تصل إلى Super.show (ب). نظرًا لأن الفئة A لا تحتوي على فئة فائقة ، فإنها تصل إلى هذا. Show (Super B). الفئة الفائقة لـ B هي ، أي Super B = A ، لذا قم بتنفيذ هذه الطريقة. show (a) ، ابحث عن العرض (أ) في الطريقة A ، وابحث عنه ، ولكن نظرًا لأن A2 هو كائن مرجعي للفئة B ، ويغطي الفئة B طريقة العرض (أ) للفئة A ، والتنفيذ النهائي للطريقة المعرض (A) في الفئة B ، أي الإخراج B و A ؛
للسؤال 5:
A2 هو كائن مرجعي للفئة B ، مع النوع A ، لذلك يشير هذا إلى الفئة A ، ثم يبحث عن طريقة (C) في الفئة A ، ولكن لم يتم العثور عليها ، لذلك كانت طريقة Super.show (C). نظرًا لأن الفئة A لا تحتوي على فئة فائقة ، فهي B ، لذلك فهي B ، لذلك يوجد في الفئة A ، ولكن لم يتم العثور عليها. B لديه أيضًا طبقة فائقة ، أي ، A ، لذلك تستمر في البحث عن طريقة العرض (أ) في الفئة A ، ووجدت ، ولكن لأن A2 هو كائن مرجعي للفئة B ، ويغطي الفئة B طريقة العرض (A) من الفئة A ، لذلك يتم تنفيذها أخيرًا. طريقة العرض (أ) في الفئة ب ، أي إخراج B و A ؛
للسؤال 6:
A2 هو كائن مرجعي للفئة B ، مع النوع A ، لذلك يشير هذا إلى الفئة A ، ثم ابحث عن طريقة (D) في الفئة A ، ووجدها. ومع ذلك ، نظرًا لأن A2 هو كائن مرجعي للفئة B ، فهو موجود في الفئة B ، لذلك وجد ما إذا كان هناك أي طريقة عرض (D) في الفئة B ، لذلك يتم تنفيذها. وبالتالي فإن طريقة العرض (د) في الفئة A ، أي الإخراج A و D ؛
للسؤال السابع:
B عبارة عن كائن تم إنشاءه من الفئة B. ينفذ رئيس الوزراء هذا. Show (B) ، ويبحث عن طريقة العرض (B) في الفئة B ، ويجدها ، ويخرج بشكل مباشر B و B ؛
للسؤال 8:
B عبارة عن كائن من الفئة B. show (b) f method in class B ، أجدها ، لذلك عندما أقوم بتنفيذ طريقة العرض (B) في الفئة B ، أخرج B و B ؛
للسؤال 9:
B عبارة عن كائن داخلي للفئة B. ينفذ رئيس الوزراء هذا. SHOW (D) ، يبحث عن طريقة العرض (D) في الفئة B ، ولكن لم يتم العثور عليها ، لذلك ذهبت إلى Super.show (D) ، والفئة الفائقة لـ B هي الفئة A ، لذلك أبحث عن طريقة العرض (D) في الفئة A ، ووجدت ذلك ، وأخرج A و D ؛
هذه هي الطريقة التي قمت بتلخيصها بعد قراءة الأسئلة على الإنترنت. آمل أن يكون ذلك مفيدًا للجميع.
شكرا لك على القراءة ، آمل أن تساعدك. شكرا لك على دعمك لهذا الموقع!