استفاده از 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 را دریافت می کند.
- نوشته شده توسط احسان عباسی
- بازدید: 3777