دوره‌ها / JAVA / سربارگذاری متد (Java Method Overloading)

سربارگذاری متد (Java Method Overloading)

15 دقیقه Article

سربارگذاری متد (Overloading): یک نام، چندین وظیفه 🎭🔥

در جاوا، شما می‌توانید چندین متد با نام یکسان داشته باشید، به شرطی که تعداد یا نوع پارامترهای آن‌ها متفاوت باشد. به این قابلیت Overloading می‌گویند.

۱. چرا Overloading؟

به جای اینکه چندین متد با نام‌های مختلف مثل plusInt و plusDouble داشته باشیم، از نام واحد plus استفاده می‌کنیم که باعث تمیزتر شدن و شهودی‌تر شدن کد می‌شود.

مثال Overloading:

{code_block('static int plusMethod(int x, int y) {\n return x + y;\n}\n\nstatic double plusMethod(double x, double y) {\n return x + y;\n}')}

۲. قوانین Overloading ⚖️

  • حداقل یکی از این موارد باید متفاوت باشد:
    • تعداد پارامترها
    • نوع داده پارامترها (مثلاً int به جای double)
    • ترتیب پارامترها (مثلاً int, String به جای String, int)
  • نکته مهم: تغییر فقط در "نوع بازگشتی" (Return Type) برای Overloading کافی نیست و باعث خطا می‌شود.
هوشمندی کامپایلر: جاوا موقع فراخوانی، به مقادیری که شما فرستاده‌اید نگاه می‌کند و به صورت خودکار متد درست را برای اجرا انتخاب می‌کند.
ترکیب با Default Values: جاوا (برخلاف پایتون یا ++C) از مقادیر پیش‌فرض برای پارامترها پشتیبانی نمی‌کند. شما معمولاً از Overloading برای شبیه‌سازی این قابلیت استفاده می‌کنید.
<hr style="margin: 50px 0; border: 0; border-top: 1px dashed rgba(255,255,255,0.1);">

بخش تخصصی: مهندسی متدها و مدیریت حافظه 🛠️💎

در این بخش، به مفاهیمی می‌پردازیم که برای درک عمیق مدیریت حافظه و کارایی در جاوا حیاتی هستند.

۱. پشته متد (Method Stack) و فریم‌ها

هر بار که متدی فراخوانی می‌شود، جاوا یک Stack Frame جدید در حافظه Stack ایجاد می‌کند. این فریم شامل متغیرهای محلی و پارامترهای متد است. وقتی متد تمام می‌شود، فریم آن از پشته حذف (Pop) می‌شود. درک این فرآیند برای دیباگ کردن خطاهایی مثل StackOverflowError بسیار مهم است.

۲. انتقال پارامتر: Pass-by-Value

یک نکته بسیار مهم در جاوا این است که جاوا همیشه مقادیر را به صورت Pass-by-Value منتقل می‌کند. برای انواع اولیه، خودِ مقدار کپی می‌شود. برای اشیاء (Objects)، "کپیِ ریفرنس" به متد فرستاده می‌شود. این یعنی شما می‌توانید ویژگی‌های یک شیء را داخل متد تغییر دهید، اما نمی‌توانید خودِ ریفرنس اصلی را به شیء دیگری متصل کنید.

۳. کدهای ماژولار و اصل Single Responsibility

در مهندسی نرم‌افزار حرفه‌ای، هر متد باید فقط و فقط "یک کار" انجام دهد. اگر متد شما بیش از ۲۰ خط شده یا نام آن شامل کلمه "And" است، احتمالاً باید آن را به متدهای کوچک‌تر تقسیم کنید. این کار باعث می‌شود کد شما قابل تست (Testable) و قابل نگهداری باشد.

نکته پایانی: متدها بلوک‌های سازنده هر اپلیکیشن بزرگ هستند. هنرِ یک برنامه‌نویس جاوا در این است که چطور منطقِ پیچیده را به متدهای ساده، کوچک و قابل استفاده مجدد تقسیم کند.

تمرین‌های عملی

برای تثبیت یادگیری این درس تمرین‌های زیر را حل کنید

سربارگذاری متد نمایش Medium
سوال تمرین

متدی به نام display بسازید که یک بار فقط یک عدد int را چاپ کند و بار دیگر یک متن String را چاپ کند. هر دو را در main تست کنید.

پاسخ تمرین
JAVA
public class Main {
  static void display(int n) {
    System.out.println(n);
  }
  static void display(String s) {
    System.out.println(s);
  }
  
  public static void main(String[] args) {
    display(100);
    display("Hello");
  }
}

آماده رفتن به درس بعدی هستید؟

این درس را به پایان رساندید و می‌توانید به درس بعدی بروید.