English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

شرح وتوضيح التغليظ (overload) والتعريف الجديد (override) في java

 很多同学对于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. هذه التعليقات تساعد في التحقق من الكود من قبل الكواشف، ولكن يمكن أن تكون بدونها.       

علامة التعديل: الفرعية تستخدم الفئة الأصلية، ولديها إجراءات مختلفة للأساليب المتطابقة. 

سيناريو التطبيق

         التعريف: عندما تكون وظيفة الدالة مشابهة، لكنها تحتاج إلى إرسال مختلفة من المعلمات.

         التعديل: عندما يكون لدى الفرعية سلوكًا خاصًا، لا يمكن أن يتم استخدامه من الفئة الأصلية لتلبية احتياجاتها.

         النقطة: التعريف والتعديل هي ظهورات متعددة. الأول هو متعدد التفاضل، والثاني هو متعدد التدفق.

          شكرًا على القراءة، آمل أن تكون قد ساعدتكم، شكرًا لدعمكم لموقعنا!

الشخص الذي يحبك