سؤال

لماذا يعطي المترجم رسالة خطأ عند تقليل رؤية طريقة ما مع تجاوزها في الفئة الفرعية؟

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

المحلول

لأن كل مثيل من الفئة الفرعية لا يزال بحاجة إلى أن يكون مثيلًا صالحًا للفئة الأساسية (انظر مبدأ استبدال Liskov).

إذا فقدت الفئة الفرعية فجأة خاصية واحدة من الفئة الأساسية (وهي طريقة عامة على سبيل المثال) ، فلن تكون بديلاً صحيحًا للفئة الأساسية.

نصائح أخرى

لأنه إذا تم السماح بذلك ، فسيكون الموقف التالي ممكنًا:

وراثة الفئة الفرعية من فئة الوالدين. الوالد لديه طريقة عامة foo, ، Sub يجعل هذه الطريقة خاصة. الآن سيتم تجميع الرمز التالي بشكل جيد ، لأن النوع المعلن عنه bar هو الوالد:

Parent bar = new Sub();
bar.foo();

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

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

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