أعتقد أن معظم الناس أكثر دراية بأمرين "الميراث" و "الجمع" في جافا. ستناقش هذه المقالة بشكل أساسي هذين الموضوعين. إذا كتبت شيئًا خاطئًا ، أو أن يكون طفوليًا ولم تكن الحجة واضحة ، فكل شخص مرحب به لترك رسالة لتصحيحي.
افترض أن هناك فئتان: A و B :
extends الفئة A B ثم نقول أن A ART B ، أ فئة فرعية ، و B هي فئة الوالدين ، وهذه الحالة هي الميراث.فكر مرة أخرى في أي الظروف التي نعتبرها عادة هذين الأمرين؟ فكرت في الأمر لفترة وجيزة وغالبًا ما تكون هناك السيناريوهات التالية:
abstract class أو interface بعد التفكير في الأمر ، يبدو أن هناك حقًا هاتين حالتين فقط ، لكن هاتين الحالتين لهما علاقة خاصة. على سبيل المثال ، يمكن بالفعل تحقيق شيء الكود العام abstract class interface الطريقة الافتراضية في Java 8).
حسنًا ، بعد قول الكثير من الهراء ، سأرمي وجهة نظري. مرحبا بكم في:
interface abstract class مثال أكثر شيوعًا: في المشاريع الفعلية ، غالبًا ما نحدد POJO أو model ، وغالبًا ما يكون لهذه النماذج بعض السمات مع نفس الاسم والنوع ، مثل:
// db table primary keyprivate int id; إنه أمر شائع جدًا ، لكنني قابلت العديد من الزملاء في عملي الفعلي. يحدد النظام فئة تحمل اسم BaseModel أو RootModel ، ويضع id السمة أعلاه فيه ، ثم ترث جميع النماذج في المشروع بأكمله فئة Basemoddel هذه. أتساءل عما إذا كنت قد قابلت هؤلاء الزملاء من قبل؟ ما هي فوائد وعيوب الكتابة مثل هذا؟
دعنا نتحدث عن الفوائد أولاً. إذا كان عليك أن تقول الفوائد التي يمكن أن تجلبها ، فأنت لا ترى أي فوائد كبيرة باستثناء كتابة لوحة المفاتيح عدة مرات وفقدان هذه السمات في الفئة الفرعية. ومع ذلك ، فقد تسبب في أشياء مزعجة للغاية للصيانة اللاحقة للمشروع.
ثم دعونا نتحدث عن المشكلات المحتملة في كتابة هذه الكتابة:
في يوم من الأيام ، لأسباب بعض الأسباب ، تريد العثور على مكان استخدام
idالسمة في الفئة الفرعية A (وراثة عوامل القاعدة) في المشروع
أنت ذكي واستخدام بمهارة find usages في IDE ، وبعد ذلك ستجد أنك قد وجدت الكثير من مواقع الاستخدام ، والكثير منها ليس ما تهتم به على الإطلاق. ولكن لا توجد طريقة ، لقد بحثت أيضًا عن موقع استخدام معرف خاصية الفئات الأخرى التي ترث عواسك الأساسي. إذا لم يكن المشروع كبيرًا ، فقد يكون لديك عدد أقل من الاحتياطات. ماذا لو كان المشروع أكبر قليلاً؟ عندما يكون لديك أكثر من 50 كفاءة في البحث ، ماذا ستفعل بعد ذلك؟
كيف تجنب هذا الموقف؟ وهذا هو ، لا تستخدم BaseModel مثل هذا لاستخدام ميراث السمة. بالطبع ، من أجل فترة صارمة ، ما زلت بحاجة إلى شرح هذا المعنى بالتفصيل. أنا لا أعارض تماما ميراث السمة. دعنا نوضح:
ما أعترض عليه هو أن جميع نماذج المشروع بأكملها ترث مشكلًا أساسيًا ثم وضع الخصائص المشتركة في عوامل الأساس
هذه الفكرة هي أن نلاحظ أنها مخصصة للمشروع بأكمله
غالبًا ما أواجه أمثلة على الكتب المدرسية السلبية أعلاه ، لذلك سأتحدث عنها بشكل منفصل. لست متأكدًا مما إذا كان هذا قد حدث في مشاريعك. على أي حال ، لقد تعرضت للغش من قبل زملائي لعدة مرات.
أما بالنسبة للأخطاء الشائعة الأخرى المتعلقة بـ "الجمع" و "الميراث" ، لم أفكر في الأمر بعد (على الأقل أعتقد أنه لن يقوم أحد بذلك). إذا اعتقدت ذلك بوضوح في المستقبل ، أو إذا كان لدى القراء اقتراحات أخرى ، آمل أن تترك رسالة للتواصل.