overload کردن متدها در جاوا

چاپ

 

overload کردن، یعنی نوشتن چند متد که نام یکسانی داشته باشند اما پارامترهای آنها با یکدیگر متفاوت باشند. در این صورت کامپایلر بر اساس آرگومان هایی که به هنگام فراخوانی یک متد به آن می دهید، منظور شما را متوجه می شود. 

بعنوان مثال، فرض کنید که در داخل یک کلاس، یک متد داشته باشیم که به موجودی یک حساب بانکی، مقداری سود اعمال می کند. این متد را ()calculateInterest می نامیم. این متد دو پارامتر از نوع double دریافت می کند که یکی میزان موجودی و یکی نرخ سود را مشخص می کند. سپس این متد حاصلضرب آنها را نمایش می دهد. عکس 4.11 این متد را نشان می دهد: 

 

(تصویر 4.11)

 نکته: متد ()calculateInterest که در تصویر 4.11 قرار دارد، قادر است تا اعداد صحیح را بعنوان آرگومان دریافت کند حتی با اینکه آرگومان ها از نوع double تعریف شده اند. دلیل این امر این است که اعداد صحیح(int) به طور اتوماتیک به اعداد double تبدیل یا متحد سازی می شود. قبلا این موضوع را در فصل 2 مورد بررسی قرار داده ایم. 

 

وقتی یک اپلیکیشن متد ()calculateInterest را فراخوانی می کند و دو مقدار از نوع double را به صورت (calculateInterest(1000.00, 0.04 به آن می دهد، 4% سود برای مقدار 1000.00 به درستی مورد محاسبه قرار می گیرد. 

حالا فرض کنید که دیگر مشتریان بانک بخواهند با استفاده از آرگومان های متفاوت، سود بانکی خود را محاسبه کنند. 

بعضی مشتریان ممکن است بخواهند سود 4% را به صورت 0.04 مشخص کنند. بعضی دیگر ممکن است بخواهند سود 4% را با مقدار 4 مشخص کنند. حالا هنگامی که به متد ()calculateInterest آرگومان های 0.04 و 1000.00 دلار را بدهیم، مقدار سود ما به درستی محاسبه شده و برابر با 40.00 دلار خواهد شد. اما هنگامی که به این متد، آرگومان های 4 و 1000.00 دلار را بدهیم، مقدار سود به اشتباه 4000.00دلار محاسبه خواهد شد. 

 یک راه برای حل این مشکل این است که متد ()calculateInterest را overload کنیم(جایگزین کنیم).  بعنوان مثال، علاوه بر متد ()calculateInterest که در تصویر 4.11 نشان داده شد، می توانیم متد نشان داده شده در تصویر 4.12 را نیز به کلاس خود اضافه کنیم: 

 (تصویر 4.12)

 نکته: توجه کنید که در تصویر بالا، در جلوی متغیر rateAsPercent متغیر rate بر عدد 100.0 تقسیم شده است نه بر مقدار 100. زیرا اگر دو عدد صحیح بر یکدیگر تقسیم شوند، حاصل یک عدد صحیح خواهد شد و مقداراعشار از بین خواهد رفت. اما اگر متغیر صحیح rate را بر مقدار 100.0 تقسیم کنیم، باعث می شود که یک مقدار از نوع double به دست بیاید. اگر بخواهیم با یک روش دیگر این کار را انجام دهیم، می توانیم از متحد سازی(cast ) به صورت زیر استفاده کنیم: 

دستور:

rateAsPercent = (double)rate / 100

 اگر یک اپلیکیشن، متد ()calculateInterest را با استفاده از دو آرگومان از نوع double فراخوانی کند، یعنوان مثال دستور (calculateInterest(1000.00, 0.04 را اجرا کند، اولین نسخه از این متد یعنی متد عکس 4.11 اجرا خواهد شد. اما اگر بعنوان آرگومان دوم، از یک عدد صحیح(integer) استفاده کند، مثلا دستور (calculateInterest(1000.00, 4 را اجرا کند، دومین نسخه از این متد یعنی متد عکس 4.12 اجرا خواهد شد. 

 همان طور که در تصویر 4.12 مشاهده می کنید، عدد صحیح rate بر مقدار 100.0 تقسیم شده است تا مقدار سود به درصد، به دست آید. 

  


البته شما می توانید برای حل این مشکل از تعدادی متد نیز استفاده کنید، بعنوان مثال می توانید از دو متد به نام های ()calculateInterestUsingDouble و ()calculateInterestUsingInt استفاده کنید. اما استفاده از متدهای overload شده برای برنامه نویسان راحت تر است.