برو به محتوای اصلی

override و overload چه تفاوت‌هایی باهم دارند؟

من کجام؟ اینجا کجاست؟

در جواب‌کو می‌تونید در مورد هر موضوعی سوال کنید، به سوالای بقیه جواب بدید و تجربتون رو به اشتراک بگذارید!

وحید هاشمی، برنامه نویس

اگه بخواهیم به صورت کلی بگیم: Overload یا سربارگذاری متد یعنی چند متد هم نام با امضاء‌های (نوع ورودی‌ها و نوع خروجی‌ها) مختلف در یک کلاس یا... هستند که بنا به ورودی‌های مختلف فراخوانی مورد نظر اجرا می‌گردد.

public class OverloadingExample {

static int sumOf(int a, int b) {

 return a+b; }

static int sumOf(int a, int b, int c) {

 return a+b+c; }

 

static double sumOf(double a, double b) {

 return a+b; }

 

static double sumOf(double a, double b, double c) {

 return a+b+c;}

 

 public static void main(String[] args) {

 System.out.println(sumOf(1,2));

 System.out.println(sumOf(10,20,30)); }}

اما Override یا تحریف یعنی متدهای پدر که توسط فرزند ارث‌بری شده‌ را پیاده‌سازی کند (هم نام و هم امضاء) یعنی یک کلاس فرزند می‌تواند پیاده‌سازی خاص خود را از متدهای کلاس پدر داشته باشد و در زمان اجرا آن پیاده‌سازی بجای پیاده‌سازی پدر استفاده شود.

Method overriding in Java

مزیت overriding این است که می‌توان رفتارهای کلاس پدر را در صورت نیاز در فرزند تغییر داد، بدین معنی که کلاس فرزند می‌تواند توابع کلاس پدر را برای خود پیاده‌سازی کند.

۳

1) از overloading برای افزایش خوانایی کد برنامه استفاده می‌شود. Overriding به توسعه‌دهنده این امکان را می‌دهد تا بدنه‌ی متدی که قبلا در کلاس پدر تعریف شده را داخل کلاس فرزند یا مشتق شده از کلاس پدر، بازنویسی کند. 

2) Overloading در سطح کلاس میزبان متدها پیاده‌سازی می‌شود. Overriding در دو کلاس که رابطه‌ی IS-A) inheritance) دارند (یکی پدر و دیگری فرزند است)، پیاده‌سازی می‌شود.

3) در overloading، پارامترهای ارسالی به هر متد بایستی متفاوت باشد. در overriding، پارامتر ارسالی به متد در کلاس پدر و فرزند باید یکی باشد.

4) Overloading مثال عینی از پیاده‌سازی مفهوم polymorphism (انجام عملیات مختلف باتوجه به آبجکت میزبان متد) در زمان اجرای برنامه می‌باشد. 

5) در جاوا، overloading را نمی‌توان به صرف تغییر نوع خروجی متد (Return type) پیاده‌سازی کرد. در واقع نوع بازگشتی متد می‌تواند یکسان بوده یا کاملا متفاوت باشد. اما تغییر پارامترهای ارسالی به متد ضروری است. در overriding نوع بازگشتی و خروجی (Return type) متد بایستی یکسان یا covariant باشد.

۳

سوالات مرتبط

آمار سوال

۹ نمایش
۰ دنبال‌کننده
۴ روز پیش پرسیده شده
آمار بازدید در این ماه

سوال رو به اشتراک بگذار