برای ساختن یک نمونه از یک کلاس، سازندهی آن را با عملگر new فراخوانی میکنید.
سازنده نوع ویژهای از متد است که هدفش مقداردهی اولیه به نمونهای است که تازه ساخته شده.
سازندهها شبیه متدهای معمولی هستند، اما نوع بازگشتی ندارند و اسمشان با اسم کلاس یکسان است.
class Library {
private int books;
public Library() {
// Initialize the books field
this.books = 10;
}
}
// This will call the constructor
var library = new Library();
سازندهها هم مانند متدهای معمولی میتوانند پارامتر داشته باشند. پارامترهای سازنده معمولاً بهصورت فیلدهای (خصوصی) نگه داشته میشوند تا بعداً به آنها دسترسی داشته باشیم، یا در یک محاسبهی یکبارمصرف به کار میروند. آرگومانها را هم میتوان به سازندهها پاس داد، درست همانطور که آرگومانها را به متدهای معمولی پاس میدهید.
class Building {
private int numberOfStories;
private int totalHeight;
public Building(int numberOfStories, double storyHeight) {
this.numberOfStories = numberOfStories;
this.totalHeight = numberOfStories * storyHeight;
}
}
// Call a constructor with two arguments
var largeBuilding = new Building(55, 6.2);
در این تمرین، شما مسابقههایی را بین انواع مختلف خودروهای کنترل از راه دور ترتیب میدهید. هر خودرو ویژگیهای سرعت و مصرف باتری خودش را دارد.
خودروها با باتری کاملاً پر (۱۰۰٪) شروع میکنند. هر بار که خودرو را با کنترل از راه دور میرانید، مسافتی معادل سرعت خودرو بر حسب متر را میپیماید و درصد باتری باقیمانده را به اندازهی مصرف باتری کاهش میدهد.
اگر باتری خودرو کمتر از درصد مصرف باتری آن باشد، دیگر نمیتوانید خودرو را برانید.
هر پیست مسابقه فاصلهی خودش را دارد. خودروها با بررسی اینکه آیا میتوانند پیست را بدون تمام شدن باتری به پایان برسانند آزمایش میشوند.
۶ وظیفه دارید که هرکدام با نمونههایی از خودروی کنترل از راه دور کار میکند.
با تعریف یک «سازنده» برای کلاس NeedForSpeed امکان ساخت خودروی کنترل از راه دور را فراهم کنید. این سازنده سرعت خودرو بر حسب متر و درصد مصرف باتری را به عنوان دو پارامتر خود (هر دو از نوع int) میگیرد:
int speed = 5;
int batteryDrain = 2;
var car = new NeedForSpeed(speed, batteryDrain);
با تعریف یک سازنده برای کلاس RaceTrack امکان ساخت پیست مسابقه را فراهم کنید. این سازنده فاصلهی پیست بر حسب متر را به عنوان تنها پارامتر خود (که از نوع int است) میگیرد:
int distance = 800;
var raceTrack = new RaceTrack(distance);
«متد» NeedForSpeed.drive() را پیادهسازی کنید که تعداد مترهای پیمودهشده را بر اساس سرعت خودرو بهروزرسانی میکند. همچنین متد NeedForSpeed.distanceDriven() را پیادهسازی کنید تا تعداد مترهای پیمودهشده توسط خودرو را برگرداند:
int speed = 5;
int batteryDrain = 2;
var car = new NeedForSpeed(speed, batteryDrain);
car.drive();
car.distanceDriven();
// => 5
متد NeedForSpeed.drive() را بهروزرسانی کنید تا باتری را بر اساس مصرف باتری خودرو خالی کند. همچنین متد NeedForSpeed.batteryDrained() را پیادهسازی کنید که نشان میدهد آیا باتری برای راندن بیش از حد خالی شده است یا نه:
int speed = 5;
int batteryDrain = 2;
var car = new NeedForSpeed(speed, batteryDrain);
car.drive();
car.batteryDrained();
// => false
پرفروشترین خودروی کنترل از راه دور، Nitro است که حداکثر سرعت چشمگیر ۵۰ متر و مصرف باتری ۴٪ دارد. متد (ایستا) NeedForSpeed.nitro() را پیادهسازی کنید تا خودرویی از این نوع را برگرداند:
var car = NeedForSpeed.nitro();
car.drive();
car.distanceDriven();
// => 50
برای به پایان رساندن یک مسابقه، خودرو باید بتواند فاصلهی مسابقه را بپیماید. یعنی باتریاش نباید پیش از عبور از خط پایان تمام شود. متد RaceTrack.canFinishRace() را پیادهسازی کنید که یک نمونهی NeedForSpeed را به عنوان پارامتر خود میگیرد و اگر خودرو بتواند مسابقه را به پایان برساند true را برمیگرداند؛ در غیر این صورت false را برگردانید:
int speed = 5;
int batteryDrain = 2;
var car = new NeedForSpeed(speed, batteryDrain);
int distance1 = 100;
var race1 = new RaceTrack(distance1);
int distance2 = 300;
var race2 = new RaceTrack(distance2);
race1.canFinishRace(car);
// => true
race2.canFinishRace(car);
// => false