English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
很多同学对于overload和override傻傻分不清楚,建议不要死记硬背概念性的知识,要理解着去记忆。
先给出我的定义:
overload(重载):在同一类或者有着继承关系的类中,一组名称相同,参数不同的方法组。本质是对不同方法的称呼。
override(覆写):存在继承关系的两个类之间,在子类中重新定义了父类中存在的方法。本质是针对同一个方法,给出不同的实现。
我们先来看重载的例子:
public class OverloadParent{ public String getPerson(String name){ return “personA” + name; } public String getPerson(int age){ return “personB” ; } public String getPerson(String name,int age){ return “personC”; } public void getPerson(String name){ System.out.println(“我是重载的方法吗?”); } }
public class OverloadChildextends OverloadParent { public void getPerson(double money){ Sytem.out.println(“我是重载的方法吗”); } }
注意观察:
(1)OverloadParent中有4个名字相同的方法
(2)前三个方法的参数类型和个数不一致,返回值一致,构成重载
(3)方法4与方法1仅仅返回值不一样,不构成重载,编译器不通过。
ps:返回值是方法执行后的结果,我们在调用方法的时候不会指定说“我要调用返回值是xxx类型的方法”,它不成成为方法重载的特征。
OverloadParent继承了Demo,Demo中拥有的方法,它都拥有了。它觉得现有的方法满足不了需求,索性重载了一个。
علامة التعريف: نفس اسم الأسلوب، معلمات مختلفة (عدد أو نوع)، وليس له علاقة بالعائد.
دعنا نرى مثالاً آخر على التعديل:
public class OverrideParent{ public void fly(){ System.out.println("I can fly!"); } }
public class OverrideChild extends OverrideParent{ @Override public void fly(){ System.out.println("I can't fly, but I can run!"); }
public static void main(String[] args){ OverwriteParent child = new OverwriteChild(); child.fly(); } }
ما الذي سيتم إخراجه عند تنفيذ طريقة main في OverrideChild؟
الإجابة: لا أستطيع الطيران، لكنني أستطيع الجري!
نحن نرى:
(1) كل من OverrideChild وOverrideParent يحتويان على طريقة fly
(2) العائد والملحقات لـ fly متطابقة، فقط كود الطريقة مختلف
(3) يحتوي طريقة fly للفرعية على تعليق @overwrite، ظهر في JDK1.5، يستخدم فقط للتنسيق الفئوي، يمكن استخدامه للتنسيق للواجهات في JDK1.6. هذه التعليقات تساعد في التحقق من الكود من قبل الكواشف، ولكن يمكن أن تكون بدونها.
علامة التعديل: الفرعية تستخدم الفئة الأصلية، ولديها إجراءات مختلفة للأساليب المتطابقة.
سيناريو التطبيق
التعريف: عندما تكون وظيفة الدالة مشابهة، لكنها تحتاج إلى إرسال مختلفة من المعلمات.
التعديل: عندما يكون لدى الفرعية سلوكًا خاصًا، لا يمكن أن يتم استخدامه من الفئة الأصلية لتلبية احتياجاتها.
النقطة: التعريف والتعديل هي ظهورات متعددة. الأول هو متعدد التفاضل، والثاني هو متعدد التدفق.
شكرًا على القراءة، آمل أن تكون قد ساعدتكم، شكرًا لدعمكم لموقعنا!