سربارگذاری متد (Java Method Overloading)
سربارگذاری متد (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 کافی نیست و باعث خطا میشود.
بخش تخصصی: مهندسی متدها و مدیریت حافظه 🛠️💎
در این بخش، به مفاهیمی میپردازیم که برای درک عمیق مدیریت حافظه و کارایی در جاوا حیاتی هستند.
۱. پشته متد (Method Stack) و فریمها
هر بار که متدی فراخوانی میشود، جاوا یک Stack Frame جدید در حافظه Stack ایجاد میکند. این فریم شامل متغیرهای محلی و پارامترهای متد است. وقتی متد تمام میشود، فریم آن از پشته حذف (Pop) میشود. درک این فرآیند برای دیباگ کردن خطاهایی مثل StackOverflowError بسیار مهم است.
۲. انتقال پارامتر: Pass-by-Value
یک نکته بسیار مهم در جاوا این است که جاوا همیشه مقادیر را به صورت Pass-by-Value منتقل میکند. برای انواع اولیه، خودِ مقدار کپی میشود. برای اشیاء (Objects)، "کپیِ ریفرنس" به متد فرستاده میشود. این یعنی شما میتوانید ویژگیهای یک شیء را داخل متد تغییر دهید، اما نمیتوانید خودِ ریفرنس اصلی را به شیء دیگری متصل کنید.
۳. کدهای ماژولار و اصل Single Responsibility
در مهندسی نرمافزار حرفهای، هر متد باید فقط و فقط "یک کار" انجام دهد. اگر متد شما بیش از ۲۰ خط شده یا نام آن شامل کلمه "And" است، احتمالاً باید آن را به متدهای کوچکتر تقسیم کنید. این کار باعث میشود کد شما قابل تست (Testable) و قابل نگهداری باشد.
تمرینهای عملی
برای تثبیت یادگیری این درس تمرینهای زیر را حل کنید
متدی به نام display بسازید که یک بار فقط یک عدد int را چاپ کند و بار دیگر یک متن String را چاپ کند. هر دو را در main تست کنید.
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");
}
}
آماده رفتن به درس بعدی هستید؟
این درس را به پایان رساندید و میتوانید به درس بعدی بروید.