جاوا

جلسه ۳۵: تفاوت overload و override کردن متدها در جاوا

در این جلسه، با تفاوت بین overload و override متدها آشنا خواهید شد. موارد زیر را بیان خواهیم کرد:

  • Overloading و Overriding متدها
  • مثالی برای overload متد
  • مثالی برای override متد

Overloading و Overriding متدها

Overloading و Overriding متدها دو مفهوم کاملاً متفاوت هستند.

تفاوت ها را در جدول زیر مقایسه می کنیم:

Method Overloading Method Overriding
اورلود در زمان کامپایل رخ می دهد اورراید در زمان اجرا رخ می دهد
عملکرد بهتری دارد زیرا اتصال در زمان کامپایل انجام می شود عملکرد ضعیف تری دارد زیرا اتصال در زمان اجرا انجام می شود
متدهای خصوصی و نهایی می توانند اورلود شوند متدهای خصوصی و نهایی را نمی توان اورراید کرد
در صورت اورلود کردن مقدار بازگشتی متد مهم نیست در صورت اورراید کردن ، نوع بازگشتی متد باید یکسان باشد
برای اورلود کردن باید آرگمان ها متفاوت باشند در صورت اورراید کردن باید آرگمان ها یکسان باشند
اورلود در یک کلاس انجام می شود کلاس پایه و کلاس مشتق شده برای اورراید کردن لازمند
معمولاً برای افزایش خوانایی کد استفاده می شود معمولاً برای پیاده سازی متدی استفاده می شود که در کلاس والد قبلاً پیاده سازی شده است

مثالی برای overload متد

در ادامه کلاس ماشین حساب را در جاوا پیاده سازی می کنیم:

//Calculator Class
class Calculator {

  // Add funtions with two parameters
  int add(int num1, int num2) {
    return num1 + num2;
  }

  // Add funtions with three parameters
  int add(int num1, int num2, int num3 ) {
    return num1 + num2 + num3;
  }

  // Add funtions with four parameters
  int add(int num1, int num2, int num3, int num4 ) {
    return num1 + num2 + num3 + num4;
  }

  public static void main(String args[]) {
    Calculator cal = new Calculator();

    System.out.println("10 + 20 =  " + cal.add(10, 20));
    System.out.println("10 + 20 + 30 =  " + cal.add(10, 20, 30));
    System.out.println("10 + 20 + 30 + 40 =  " + cal.add(10, 20, 30, 40));
  }
  
}

در اینجا ما ۳ نسخه مختلف از تابع ()add داریم. تابع ()add در اینجا overload شده است.

مثالی برای override متد

در اینجا کلاس Shape را در جاوا پیاده سازی می کنیم:

// Shape Class
class Shape {
  
  public double getArea() {
    return 0;
  }
  
}

// A Rectangle is a Shape
class Rectangle extends Shape {  // extended form the Shape class

  private double length;
  private double width;
  
  public Rectangle(double length, double width) {
    this.length = length;
    this.width = width;
  }

  public double getArea() {
    return this.width * this.length;
  }
  
}

// A Circle is a Shape
class Circle extends Shape {

  private double radius;
  
  public Circle(double radius) {
    this.radius = radius;
  }

  public double getArea() {
    return 3.13 * this.radius * this.radius;
  }


  public static void main(String args[]) {
    Shape[] shape = new Shape[2]; // Creating the shape array of size 2

    shape[0] = new Circle(3); // creating the circle object at index 0
    shape[1] = new Rectangle(2, 3); // creating the rectangle object at index 1

    System.out.println("Area of Circle: " + shape[0].getArea());
    System.out.println("Area of Rectangle: " + shape[1].getArea());
  }

}

ما یک کلاس پایه به نام Shape و دو کلاس مشتق شده با نام های Rectangle و Circle داریم. در اینجا ، متد ()getArea از کلاس Shape در کلاس Rectangle و Circle اورراید شده است. ما تفاوت های بین overload و override متدها را یاد گرفتیم. در درس بعدی ، نگاهی خواهیم داشت به چند ریختی پویا.

نوشته های مشابه

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

دکمه بازگشت به بالا