Створення екземпляра класу відбувається через виклик його конструктора за допомогою оператора 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 вправ та справжнє наставництво від людей, і все це безкоштовно.