يتم إنشاء نسخة من الصنف عن طريق استدعاء المنشئ الخاص به باستخدام العامل 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);
في هذا التمرين، ستُنظّم سباقات بين أنواع مختلفة من سيارات التحكم عن بُعد. ولكل سيارة سرعتها الخاصة وخصائص استهلاكها للبطارية.
تبدأ السيارات ببطاريات ممتلئة بالكامل (100%). وفي كل مرة تقود فيها السيارة باستخدام جهاز التحكم عن بُعد، تقطع مسافة تساوي سرعة السيارة بالأمتار، وتخفض نسبة البطارية المتبقية بمقدار استهلاكها.
وإذا كانت بطارية السيارة أقل من نسبة استهلاكها، فلن تتمكن من قيادتها بعد ذلك.
لكل حلبة سباق مسافتها الخاصة. ويُختبر كل سيارة بالتحقق مما إذا كانت قادرة على إنهاء الحلبة دون استنفاد بطاريتها.
لديك ست مهام، وستتعامل كل واحدة منها مع نسخ من سيارات التحكم عن بُعد.
اسمح بإنشاء سيارة تحكم عن بُعد من خلال تعريف مُنشئ لصنف 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، التي تبلغ سرعتها القصوى المذهلة 50 مترًا مع استهلاك بطارية نسبته 4%. نفّذ الطريقة (الثابتة) 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
سجّل في Exercism لتتعلّم وتتقن Java عبر 26 مفهومًا158 تمرينًا، وإرشاد بشري حقيقي، وكل ذلك مجانًا.