هر کلاس شامل Constructorهایی است که برای ایجاد اشیا از روی نقشهٔ کلاس فراخوانی میشوند. اعلامیهٔ Constructor شبیه اعلامیهٔ Method است — با این تفاوت که نام کلاس را دارد و نوع خروجی ندارد. برای مثال، کلاس Bicycle یک Constructor دارد:
public Bicycle(int startCadence, int startSpeed, int startGear) {
gear = startGear;
cadence = startCadence;
speed = startSpeed;
}
برای ایجاد یک شیء جدید Bicycle به نام myBike، از��作ور new برای فراخوانی Constructor استفاده میشود:
Bicycle myBike = new Bicycle(30, 0, 8);
عبارت new Bicycle(30, 0, 8) حافظهای برای شیء اختصاص میدهد و فیلدهای آن را مقداردهی اولیه میکند.
اگرچه کلاس Bicycle فقط یک Constructor دارد، میتواند Constructorهای بیشتری داشته باشد — از جمله یک Constructor بدون پارامتر (No-Argument Constructor):
public Bicycle() {
gear = 1;
cadence = 10;
speed = 0;
}
عبارت Bicycle yourBike = new Bicycle(); Constructor بدون پارامتر را فراخوانی میکند تا یک شیء جدید Bicycle به نام yourBike بسازد.
هر دو Constructor میتوانند در کلاس Bicycle تعریف شوند، چون لیست آرگومانهای متفاوتی دارند. مانند Methodها، پلتفرم جاوا Constructorها را بر اساس تعداد و نوع آرگومانها از هم تشخیص میدهد. نمیتوانید دو Constructor با تعداد و نوع آرگومانهای یکسان تعریف کنید، چون کامپایلر قادر به تمایز آنها نخواهد بود و خطای کامپایل رخ میدهد.
لازم نیست حتماً Constructorهایی برای کلاس خود تعریف کنید. کامپایلر بهطور خودکار برای هر کلاس بدون Constructor، یک Constructor پیشفرض (Default Constructor) بدون پارامتر ایجاد میکند. این Constructor پیشفرض، Constructor بدون پارامتر Superclass را فراخوانی میکند. اگر Superclass Constructor بدون پارامتر نداشته باشد، کامپایلر خطا میدهد.
نکته: اگر کلاس Superclass صریحی نداشته باشد، یک Superclass ضمنی به نام Object دارد که Constructor بدون پارامتر دارد.
میتوانید خودتان نیز از Constructor Superclass استفاده کنید. کلاس MountainBike در ابتدای این درس دقیقاً همین کار را انجام میداد.
همچنین میتوانید از Modifierهای دسترسی در اعلامیهٔ Constructor استفاده کنید تا کنترل کنید کدام کلاسها میتوانند Constructor را فراخوانی کنند.
این محتوا کاملا رایگان توسط تیم کدلپر ترجمه شده و در اختیار شما کاربران عزیز قرار گرفته است، هر گونه کپی برداری برای مقاصد غیر رایگان و بدون ذکر منبع، مورد پیگیری قانونی قرار میگیرد.
ترجمه شده از منبع: https://dev.java/learn/