العديد من الطلاب أغبياء ولا يمكنهم معرفة الفرق بين التحميل الزائد والتجاوز. يوصى بعدم حفظ المعرفة المفاهيمية من خلال Rote ، ولكن لفهمها وحفظها.
اسمحوا لي أولاً أن أعطي تعريفي:
أولاً ، دعنا نتحدث عن: التحميل الزائد
(1) تحميل الأسلوب هو وسيلة للسماح للفصول بمعالجة أنواع مختلفة من البيانات بطريقة موحدة. توجد وظائف متعددة بنفس الاسم في نفس الوقت ، مع معلمات/أنواع مختلفة. التحميل الزائد هو مظهر من مظاهر تعدد الأشكال في الفصل.
(2) تعني طريقة التحميل الزائد لـ Java أنه يمكن إنشاء طرق متعددة في الفصل ، ولديها نفس الاسم ، ولكن لديها معلمات مختلفة وتعريفات مختلفة. عند استدعاء طرق ، نقرر الطريقة التي يجب استخدامها بعدد المعلمات المختلفة وأنواع المعلمات التي تم تمريرها إليها. هذا هو تعدد الأشكال.
(3) عند التحميل الزائد ، يجب أن يكون اسم الطريقة هو نفسه ، ولكن نوع المعلمة ورقمها مختلفان ، ويمكن أن يكون نوع قيمة الإرجاع هو نفسه أو مختلف. لا يمكن استخدام نوع الإرجاع كمعايير التمييز لوظائف التحميل الزائد.
دعونا أولاً نلقي نظرة على مثال التحميل الزائد:
الفئة العامة الزائد {السلسلة العامة 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 ("هل أنا طريقة محملة") ؛ }}انتبه إلى الملاحظة:
(1) هناك 4 طرق تحمل نفس الاسم في الحمل الزائد
(2) أنواع وأرقام المعلمات من الطرق الثلاثة الأولى غير متسقة ، وقيمة الإرجاع هي نفسها ، والتي تشكل حمولة زائدة
(3) الطريقة 4 والطريقة 1 تختلف قيم الإرجاع فقط ، ولا تشكل الزائد ، ولا يمر المترجم.
ملاحظة: قيمة الإرجاع هي نتيجة تنفيذ الطريقة. عندما نسمي الطريقة ، لن نحدد "أريد استدعاء طريقة مع قيمة الإرجاع لنوع XXX" ، فلن يصبح ميزة التحميل الزائد للسلع.
(4) توضيح الحمل الزائد ، ولديه جميع الأساليب المملوكة في العرض التجريبي. شعرت أن الطريقة الحالية لا يمكن أن تلبي الاحتياجات ، لذلك فإنها ببساطة زائدة على تحميلها.
الأعلام المحملة: اسم الطريقة هو نفسه ، والمعلمات مختلفة (الرقم أو النوع) ، ولا علاقة لها بقيمة الإرجاع.
ثم دعونا نتحدث عن التجاوز (تجاوز)
(1) تعدد الأشكال بين الطبقة الأم وفئة الطفل يعيد تعريف وظائف الفئة الأصل. إذا كانت الطريقة المحددة في الفئة الفرعية لها نفس الاسم والمعلمات مثل فئة الأم ، فإننا نقول أن الطريقة تتغلب عليها. في Java ، يمكن أن ترث الفئات الفرعية طرقًا من الفئة الأصل دون إعادة كتابة نفس الطريقة.
لكن في بعض الأحيان ، لا تريد الفئة الفرعية أن ترث أساليب فئة الوالدين سليمة ، ولكنها تريد إجراء بعض التعديلات ، والتي تتطلب إعادة كتابة الطريقة.
تسمى إعادة كتابة الطريقة أيضًا الكتابة فوقها.
(2) إذا كانت الطريقة في الفئة الفرعية لها نفس اسم الطريقة ، ونوع الإرجاع وجدول المعلمة كطريقة في الفئة الأصل ، فإن الطريقة الجديدة ستجاوز الطريقة الأصلية.
إذا كنت بحاجة إلى الطريقة الأصلية في الفئة الأصل ، فيمكنك استخدام الكلمة الرئيسية الفائقة ، والتي تشير إلى الفئة الأم للفئة الحالية.
(3) لا يمكن أن تكون أذونات تعديل الوصول لوظائف الفئة الفرعية أقل من تلك الموجودة في فئة الأصل ؛
دعنا نلقي نظرة على مثال على الكتابة فوق:
overrideparent {public void fly () {system.out.println ("iCan fly!") ؛ }} تمتد الفئة العامة OverRideChild على تجاوز {Override public void fly () {system.out.println ("iCan't fly ، لكن يمكنني الركض!") ؛ ) child.fly () ؛ }}ماذا سيتم الإخراج عند تنفيذ الطريقة الرئيسية للتخويف؟
الجواب هو: لا أستطيع أن أتعامل مع الجري!
نرى:
(1) OverrideChild و OverrideParent لديهم طريقة ذبابة
(2) قيمة الإرجاع ومعدل الطيران متماثل
(3) هناك تعليق توضيحي لـ Overwrite قبل طريقة الطيران من الفئة الفرعية. يظهر JDK1.5 ويستخدم فقط لميراث الفصل. 1.6 يمكن استخدامها لتنفيذ الواجهة. يساعد هذا التعليق التوضيحي على التحقق ، ولا بأس بعدم إضافته.
الأعلام المتجاوز : يرث الطفل فئة الوالدين ولديه تطبيقات مختلفة لنفس الطريقة.
سيناريوهات التطبيق
التحميل الزائد: عندما تكون وظائف الطريقة متشابهة ، ولكن يجب تمرير المعلمات المختلفة.
Override: عندما يكون للفئة الفرعية سلوكها الفريد الخاص ، فإنها ترث من فئة الوالدين ولا يمكنها تلبية احتياجاتها الخاصة.
ملاحظة: التحميل الزائد والكتابة فوق كل من مظاهر تعدد الأشكال. السابق هو تعدد الأشكال المترجم ، في حين أن الأخير هو تعدد الأشكال وقت التشغيل.
قواعد لإعادة الكتابة:
1. يجب أن تكون قائمة المعلمات هي نفس الطريقة التي يتم إعادة كتابتها ، وإلا لا يمكن تسميتها إعادة الكتابة ولكن تم تحميلها بشكل زائد.
2. يجب أن يكون النوع الذي تم إرجاعه دائمًا هو نفس نوع الإرجاع للطريقة المكتوبة ، وإلا فإنه لا يمكن أن يطلق عليه إعادة الكتابة ولكنه تم تحميله بشكل زائد.
3. يجب أن يكون الحد المعدل للوصول أكبر من معدل الوصول للطريقة المعاد كتابة (Public> محمية> افتراضي> خاص)
4. يجب ألا ترمي طريقة إعادة الكتابة استثناءات فحص جديدة أو استثناءات أكثر من ذلك على نطاق واسع من إعلان طريقة إعادة الكتابة. على سبيل المثال:
تعلن طريقة الفئة الأصل عن استثناء التحقق من IOException. عند إعادة كتابة هذه الطريقة ، لا يمكنك إلقاء استثناء ، يمكنك فقط رمي استثناء من الفئة الفرعية من IOException ، ويمكنك إلقاء استثناءات غير متوقعة.
وقواعد التحميل الزائد:
1. يجب أن يكون لديك قوائم معلمات مختلفة ؛
2. يمكن أن يكون هناك نوع إرجاع لا يوبخك ، طالما أن قائمة المعلمات مختلفة ؛
3. قد يكون هناك معدلات وصول مختلفة.
4. يمكن إلقاء استثناءات مختلفة.
الفرق بين إعادة الكتابة والحمل الزائد هو:
إعادة كتابة تعدد الأشكال ، فإن استدعاء الأساليب الزائدة يمكن أن تقلل بشكل كبير من كمية الإدخال من التعليمات البرمجية. طالما أن اسم الطريقة نفسه يمرر معلمات مختلفة فيه ، يمكن أن يكون له وظائف مختلفة أو قيم الإرجاع.
إذا كنت تستخدم إعادة كتابة وحمل الزائد بشكل جيد ، فيمكنك تصميم فصل بهيكل واضح وموجز. يمكن القول أن دور إعادة الكتابة والتحميل الزائد في عملية كتابة رمز أمر غير عادي.
ما سبق هو كل محتوى هذه المقالة. آمل أن يكون ذلك مفيدًا لتعلم الجميع وآمل أن يدعم الجميع wulin.com أكثر.