ما الفرق بين override و overload ؟

كثير ما سمعت مصطلحي override , overload في لغات البرمجة  ولم اتوصل للفرق بينهم وما هي فوائدهم اثناء استخدام الكود .

الرجاء ممن يعرف ما الفرق وفوائد الاستخدام شرحها لي ويفضل شرح بعض الامثلة الواقعية عليها حتى لا انساها مستقبلا وشكرا .

  1. OverLoading

    تتم بين اكتر من ميثود فى كلاس واحد و يكون لهما نفس الاسم

    و الاختلاف بين الميثود و الأخرى يكون فى
    -الباراميترات
    -ال modifiers يعنى كونهم ,public , protected , private, default أو كما تشاء فى التنويع بينهم
    مع العلم أنه فى حالة الـ private لن يتسنى لك استخدام الدالة من الأوبجكت

    public class tryMethods {
    
     
     public static void main(String[] args) {
      
      Methods m = new Methods();
      m.Print();
      
      m.Print(3);
      
      m.Print("Welcome");
      
     }
     
     
    }
    
    class Methods{
     
     public void Print(){
      
      System.out.println("No name or number...");
      
     }
     protected void Print(int i){
      
      System.out.println(Integer.toString(i*2));
      
     }
     public void Print(String x){
      
      System.out.println(x);
      
     }
     
     
    }

    Overriding

    شبيهة بال overloading إلى حد ما و لكنها
    – لا تحدث بين الدالتين فى كلاس واحد إنما بين كلاس و كلاس وارث منه
    -نفس البارامترات
    – الاختلاف فى الmodifiers يكون مقنن حيث يمكنك التغيير (فى الكلاس الوارث) و لكن لmodifier صلاحيته أعلى (أقل تقييدا) و يمكنك استخدام نفس ال modifier
    و لك أن تضيف static , synchronized,final أو غيرهم
    و التدريج من أعلى لأسفل كالتالى:
    public
    protected
    default
    ولا مجال للـ private هنا

    و إن قمت بأخذ object من الكلاس الوارث و نفذت الدالة من غير override سيتم تنفيذ دالة الكلاس الموروث منه
    إنما بتطبيق ال override يتم تنفيذ دالة الكلاس الوارث
    كلاس وارث = sub Class
    كلاس موروث منه = Super Class


    ملحوظة : يمكنت إضافة @Override
    قبل اسم الميثود التى ترغب فى أن تعمل Override لكى يساعدك ال compiler فى عمل override سليم 😉 
    مثال :

    public class TryInhirit {
    
     
     public static void main(String[] args) {
      
     Employee e = new Employee();
     float sal =e.countSal();
     // هنا يطبع الخاج الخاص ب Employee
     System.out.println(Float.toString(sal));
     
     Manager m = new Manager();
     sal = m.countSal();
     // هنا يطبع الخاج الخاص ب Manager
     System.out.println(Float.toString(sal));
     
     sal = m.countSal(2);
     // لاحظ هنا overload
     System.out.println(Float.toString(sal));
    }
    
    }
    class Employee{
     float sal=10;
     
       float countSal(){
      
      return sal;
     }
       
     void printHi(){
      System.out.println("Hi");
     }
     
    }
    
    class Manager extends Employee{
     @Override
      protected float countSal(){
      return sal*2;
     }
     
     float countSal(int x){
      
      return x*sal;
      
     }
     
    }
    • 0
أضف اجابة

أضف اجابة

‫تصفح