العديد من الطلاب أغبياء ولا يمكنهم معرفة الفرق بين التحميل الزائد والتجاوز. يوصى بعدم حفظ المعرفة المفاهيمية من خلال Rote ، ولكن لفهمها وحفظها.
اسمحوا لي أولاً أن أعطي تعريفي:
التحميل الزائد: في نفس الفئة أو في علاقة الميراث ، مجموعة طريقة تحمل نفس الاسم والمعلمات المختلفة. في الأساس ، هو اسم الطرق المختلفة.
التجاوز: بين فئتين لهما علاقات الميراث ، يتم إعادة تعريف الأساليب الموجودة في الطبقة الأم في الفئة الفرعية. الجوهر هو إعطاء تطبيقات مختلفة لنفس الطريقة.
دعونا أولاً نلقي نظرة على مثال التحميل الزائد:
الفئة العامة الزائد {السلسلة العامة getPerson (اسم السلسلة) {return "persona" + name ؛ } السلسلة العامة getPerson (int Age) {return "personb" ؛ } السلسلة العامة getPerson (اسم السلسلة ، int age) {return "personc" ؛ } public void getPerson (اسم السلسلة) {system.out.println ("is i method method؟") ؛ }} الفئة العامة overloadChildChildExtends overloadparent {public void getPerson (double money) {system.out.println ("is i a overloaded method") ؛ }}انتبه إلى الملاحظة:
(1) هناك 4 طرق تحمل نفس الاسم في الحمل الزائد
(2) أنواع وأرقام المعلمات من الطرق الثلاثة الأولى غير متسقة ، وقيمة الإرجاع هي نفسها ، والتي تشكل حمولة زائدة
(3) الطريقة 4 والطريقة 1 تختلف قيم الإرجاع فقط ، ولا تشكل الزائد ، ولا يمر المترجم.
ملاحظة: قيمة الإرجاع هي نتيجة تنفيذ الطريقة. عندما نسمي الطريقة ، لن نحدد "أريد استدعاء طريقة مع قيمة الإرجاع لنوع XXX" ، فلن يصبح ميزة التحميل الزائد للسلع.
(4) توضيح الحمل الزائد ، ولديه جميع الأساليب المملوكة في العرض التجريبي. شعرت أن الطريقة الحالية لا يمكن أن تلبي الاحتياجات ، لذلك فإنها ببساطة زائدة على تحميلها.
الأعلام المحملة: اسم الطريقة هو نفسه ، والمعلمات مختلفة (الرقم أو النوع) ، ولا علاقة لها بقيمة الإرجاع.
دعنا نلقي نظرة على مثال على الكتابة فوق:
overrideparent {public void fly () {system.out.println ("iCan fly!") ؛ }} يمتد الفئة العامة OverRideChild OutrideParent {Override public void fly () {system.out.println ("iCan't fly ، لكن يمكنني الجري!") ؛ } static vid main (string [] args) {overtwriteparent child = new OvertwriteChild () ؛ child.fly () ؛ }}ماذا سيتم الإخراج عند تنفيذ الطريقة الرئيسية للتخويف؟
الجواب هو: لا أستطيع أن أتعامل مع الجري!
نرى:
(1) OverrideChild و OverrideParent لديهم طريقة ذبابة
(2) قيمة الإرجاع ومعدل الطيران متماثل
(3) هناك تعليق توضيحي لـ Overwrite قبل طريقة الطيران من الفئة الفرعية. يظهر JDK1.5 ويستخدم فقط لميراث الفصل. 1.6 يمكن استخدامها لتنفيذ الواجهة. يساعد هذا التعليق التوضيحي على التحقق ، ولا بأس بعدم إضافته.
الأعلام المتجاوز: يرث الطفل فئة الوالدين ولديه تطبيقات مختلفة لنفس الطريقة.
سيناريوهات التطبيق
التحميل الزائد: عندما تكون وظائف الطريقة متشابهة ، ولكن يجب تمرير المعلمات المختلفة.
Override: عندما يكون للفئة الفرعية سلوكها الفريد الخاص ، فإنها ترث من فئة الوالدين ولا يمكنها تلبية احتياجاتها الخاصة.
ملاحظة: التحميل الزائد والكتابة فوق كل من مظاهر تعدد الأشكال. السابق هو تعدد الأشكال المترجم ، في حين أن الأخير هو تعدد الأشكال وقت التشغيل.
شكرا لك على القراءة ، آمل أن تساعدك. شكرا لك على دعمك لهذا الموقع!