سبد (0)

استفاده از constructor به همراه پارامتر

در فصل 3 آموختیم که وقتی یک کلاس ایجاد می کنیم، جاوا به طور اتوماتیک یک constructor  برای آن ایجاد می کند. و آموختیم که می توانیم constructor  دلخواه خود را بنویسیم. اگر بخواهیم مطمعن شویم که متغیرهای عضوی درون کلاس ما با مقادیر مناسبی مقداردهی اولیه شده اند، می توانیم از constructor  ها استفاده کنیم. 

در فصل 3 گفتیم که به آن constructor که به طور اتوماتیک برای کلاس ها ایجاد می شود، constructor پیش فرض گفته می شود و هیچ آرگومانی را نمی پذیرد. همچنین گفتیم که می توان یک constructor دلخواه پیش فرض برای یک کلاس نوشت. وقتی که خودمان یک constructor را می نویسیم، می توانیم برای آن تعداد پارامتر تعیین کنیم. از این پارامترها برای مقداردهی کردن متغیرهای عضوی یک شیء(از آن کلاس) استفاده می شود. 


بعنوان مثال فرض کنید که کلاس Employee  تنها یک متغیر عضوی داشته باشد. به تصویر 4.18 توجه کنید.

همان طور که مشاهده می کنید، constructor این کلاس به هر متغیر empNum  به هنگام ایجاد یک شیء از این کلاس، مقدار 999 را انتساب می دهد. هر زمان که از کلاس Employee با استفاده از دستوری شبیه به زیر، یک شیء ایجاد کنیم: 

Employee partTimeWorker = new Employee();

حتی اگر از هیچ متدی برای انتساب دادن مقادیر به متغیرها استفاده نکنیم، مطمئن هستیم که متغیر empNum  در شیء artTimeWorker و  دیگر اشیاء کلاس Employee  دارای مقدار اولیه ی 999 است. 

 نکته: می توانیم با استفاده از یک متد دلخواه به نام ()setEmpNum به متغیرهای عضوی اشیاء ایجاد شده از کلاس Employee  مقادیری را انتساب دهیم اما یک constructor درست به هنگام ایجاد یک شیء مقادیر را به متغیرهای عضوی انتساب می دهد(نه پس از آن). 

 


همچنین ممکن است بخواهید از کلاس Employee  اشیائی ایجاد کنید که در آنها مقدار متغیر empNum  با یکدیگر متفاوت باشد. برای انجام این کار می توانید به هنگام ایجاد این شیء یک عدد را به constructor پاس دهید. همان طور که در تصویر 4.19 مشاهده می کنید، یک کلاس به نام Employee  وجود داردکه حاوی یک constructor است که یک پارامتر را می پذیرد. حال با استفاده از دستوری مثل دستور زیر، می توانیم یک آرگومان را به این constructor پاس بدهیم: 

دستور:

Employee partTimeWorker = new Employee(881);


 وقتی که constructor اجرا می شود، مقدار صحیحی که بین پرانتزهای فراخوانی قرار داده ایم، بعنوان پارامتر num به سازنده ی ()Employee داده می شود. و سپس به empNum که در داخل این constructor قرار دارد، انتساب داده می شود. وقتی که یک کلاس به نام Employee به همراه یک constructor درست مثل تصویر 4.19 می سازیم، هر شیء از نوع Employee  که ایجاد کنیم، باید در داخل پرانتزها یک عدد صحیح بعنوان آرگومان مشخص کنیم تا در constructor  مورد استفاده قرار بگیرد. به عبارت دیگر، در این نسخه از کلاس Employee دیگر دستور زیر کار نخواهد کرد: 

دستور:

Employee partTimeWorker = new Employee();

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

اگر یک کلاس،تنها یک constructor داشته باشد، و نیاز به یک آرگومان داشته باشد، باید برای هر شیء که از این کلاس ایجاد می کنید، یک آرگومان ارائه دهید. 

 


 overload کردن constructorها

درست مثال دیگر متدها، شما می توانید constructorها را نیز overload کنید. overload کردن constructorها به ما امکان می دهد تا در صورت نیاز بتوانیم به اشیای ایجاد شده آرگومان های متفاوت بدهیم و یا اینکه هیچ آرگومانی را به آنها اختصاص ندهیم. بعنوان مثال، علاوه بر constructor ارائه شده در عکس 4.19 می توانیم یک constructor دیگر برای کلاس Employee ایجاد کنیم. تصویر 4.20 کلاس Employee را به همراه دو constructor نشان می دهد:

 وقتی که شما با استفاده از این کلاس، یک شیء از نوع Employee ایجاد کنید، می توانید برای این شیء مقدار empNum را تعیین کنید و یا می توانید هیچ مقداری را تعیین نکنید(بعنوان آرگومان). هنگامی که با استفاده از دستور زیر، یک شیء از نوع Employee ایجاد کنید:

دستور

Employee aWorker = new Employee();

آن constructor که هیچ پارامتری نداشت فراخوانی می شود و متغیر empNum  در این شیء Employee مقدار 999 را دریافت می کند. 

 اما وقتی که با استفاده از دستور زیر، یک شیء از نوع Employee ایجاد کنید:

دستور

Employee anotherWorker = new Employee(7677);

آن constructor که به یک مقدار نیاز داشت اجرا می شود و متغیر empNum از شیء anotherWorker مقدار 7677 را دریافت می کند. 

تمامی محصولات و خدمات این وبسایت، حسب مورد دارای مجوزهای لازم از مراجع مربوطه می‌باشند و فعالیت‌های این سایت تابع قوانین و مقررات جمهوری اسلامی ایران است.
logo-samandehi مجوز نشر دیجیتال از وزرات فرهنگ و ارشاد اسلامی پرداخت آنلاین -  بانک ملت معرفی بیاموز در شبکه سه