سؤال

لا تسمح Java بالميراث من فصول متعددة (لا تزال تسمح بالميراث من واجهات متعددة.)، وأنا أعلم أنها مضمنة كثيرا مع مشكلة الماس الكلاسيكية. لكن أسئلتي هي لماذا لا تسمح Java بالميراث المتعدد مثل C ++ عندما لا يكون هناك غموض (وبالتالي لا توجد فرص لمشكلة الماس) أثناء الورث من فئة قاعدة متعددة؟

هل كانت مفيدة؟

المحلول

كانت قرار التصميم من جافا. لن تحصل عليه أبدا، لذلك لا تقلق كثيرا حيال ذلك. على الرغم من أن MI قد تساعدك على جعل الزيوز، فهذا هو MI الصالح الوحيد الذي ستفعلك على الإطلاق.

نصائح أخرى

لقد قرأت أن معظم المبرمجين لا يستخدمون الميراث المتعددة بطريقة مناسبة. "فقط المضي قدما ورثت من فئة فقط لإعادة استخدام التعليمات البرمجية" ليست أفضل الممارسات في حالة الميراث المتعدد.

لا يعرف العديد من المبرمجين متى يستخدمون الميراث البسيط في معظم الحالات. يجب استخدام الميراث المتعدد بحذر وفقط إذا كنت تعرف ما تفعله إذا كنت ترغب في الحصول على تصميم جيد.

لا أعتقد أن عدم وجود ميراث متعددة في Java (كما هو الحال في C ++) سيؤدي إلى وضع قيود في رسم الخرائط في تصميم التعليمات البرمجية / التطبيق الخاصة بك في الفصول الدراسية.

إذا دعمت Java العديد من الميراث، فقد تؤثر على ميزات أخرى من Java
النظر في طريقة Super () التي يتم استخدامها للاتصال ببرنامج Super Class Britchination.If يحتوي على فئة فائقة متعددة (بسبب الميراث المتعدد)، ثم سيتم الخلط بين المحول البرمجي حول ما يجب استدعاء منشئ الطبقة الفائقة ورمي خطأ

بساطة. يقتبس توم sintes.,

الفريق لتصميم جافا يبحث لجعل جافا:

  • بسيط، وجوه موجهة، ومألوفة
  • قوية وآمنة
  • الهندسة المعمارية محايدة ومحمولة
  • أداء عالي
  • تفسيرها، خيوط، وديناميكية

أسباب حذف الميراث المتعدد من لغة Java في الغالب من الهدف "البسيط والكائن الموجهة والمألوفة". ككلغة بسيطة، أراد منشئو Java لغة أن معظم المطورين يمكنهم فهمهم دون تدريب مكثف. لتحقيق هذه الغاية، عملوا على جعل اللغة تشبه C ++ قدر الإمكان (مألوفة) دون حمل تعقيد C ++ غير الضروري (بسيط).

في رأي المصممين، يتسبب الميراث المتعدد في المزيد من المشاكل والارتباك مما يحل. لذلك قطعوا ميراث متعددة من اللغة (تماما كما قطعوا التحميل الزائد للمشغل). تعلمني تجربة مصممي C ++ الواسعة أن الميراث المتعدد لم يكن يستحق الصداع.

قرر مصممي جافا ذلك. يمكن محاكاة الميراث المتعددة باستخدام الواجهات.

إجابة واحدة بسيطة هي أن جميع الفصول في جافا تستمد من Java.lang.Object IIRC. لذلك، سوف دائما لديك مشكلة الماس ... :-D

صحيح أن جافا لم تستخدم لدعم الميراث المتعددة للتنفيذ (فقط من نوع واجهة IE). كان هذا قرار التصميم.

ومع ذلك، نظرا لأن Java 8، فإنه يدعم الميراث المتعددة باستخدام الأساليب الافتراضية. يرى http://docs.oracle.com/javase/tutorial/java/iandi/multipleinheritance.html:

الميراث المتعدد التنفيذ هو القدرة على ترث تعريفات الطريقة من فئات متعددة. تنشأ مشاكل مع هذا النوع من الميراث المتعدد، مثل تعارضات الاسم والغموض. ... الأساليب الافتراضية تقدم شكل واحد من ميراث التنفيذ المتعددة.

تنشأ مشكلة الماس عندما تحدد فئات الوالدين المتعددة تطبيقاتها الخاصة لشيء ما، ويتعين على فئة الطفل من هذين التعامل مع غموض التنفيذ الذي يجب استخدامه. إذن ماذا لو كانت جميع الفصول الدراسية في جافا مستمدة من الكائن، فهذا فئة الوالدين واحدة. "الوالد الوحيد، فئات متعددة مشتقة" ليست هي نفسها "الآباء المتعددين، فئة واحدة مشتقة"

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top