Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Об'єктно орієнтовне програмування1.doc
Скачиваний:
5
Добавлен:
17.11.2019
Размер:
1.38 Mб
Скачать

4.1. Ініціалізація за допомогою конструктора

Конструктори — це методи, які несуть відповідальність за створення об'єктів та ініціалізацію їхніх змінних. Вони завжди мають таке саме ім'я, як і клас об'єкта, що його вони створюють, і не повертають значення будь-якого типу.

Приклад:

public class To String Without {

int x,y;

/** простий конструктор*/

public class To String Without (int anX, int aY){

x = anX; у = aY;

}

/**головна програма тільки створює і виводить об'єкт*/ public static void main (String[] args) { System.out.println (new ToStringWithout (42,86)); }

}

Результат виводу має не дуже інформативний вигляд:

ToStringWithout@ 990с747в

Для кращого виводу слід реалізувати метод ToString ():

/* метод ToString () з перевизначенням*/

public class To String Without {

Intx.y;

/** Простий конструктор*/ public class ToStringWithout (int anX, int aY){ x - anX; у = aY; }

/**Перевизначаємо То String*/ public StringToString () { return «ToStringWith ["+x+ ", "+y+ "] ";

public static void main (String[] args) { System.out.println (new ToStringWithout (42,86)); }

}

У результаті дій маємо: ToStringWithout (42,86)

4.2. Конструктор без параметрів

Конструктор, як і будь-який метод, може мати параметри, для того, щоб дати змогу вам вказати, як створювати об'єкт.

До того ж параметри конструктора дають змогу передавати аргументи для ініціалізації об'єкта. Оскільки ім'я конструктора визначено іменем класу, то для нього може існувати тільки одне ім'я. Але що потрібно робити, коли доведеться створювати об'єкти кількома способами? Наприклад, ви створюєте клас, який ініціалізується стандартно і використовує інформацію з визначе ного файла. У цьому разі необхідні два конструктори, один з яких не має параметрів (конструктор за замовчуванням), а дру-гий бере як параметр рядок, в якому вказується ім'я файла. Із файла слід ініціалізувати об'єкт.

Оскільки вони є повноцінними конструкторами, то повинні мати одне ім'я — ім'я класу. Отже, щоб використовувати методи з однаковими іменами, але з різними параметрами, необхідне пе­ревантаження методів.

Конструктор за замовчуванням — це конструктор без парамет­рів. Коли створюється клас без конструкторів, компілятор авто­матично додає конструктор за замовчуванням:

class Jah{

int j;

}

public class DConstructor {

public static void main (String [] args)

{

Joh me = new Jah (); //за замовчуванням.

}

Розглянемо приклад неявного звернення до конструктора су-перкласу:

class MusicalEnsemble{

int members;

int category; категорія музики

  1. класична;

  2. кантрі;

  3. джаз. MusicalEnsemble() { members =65;

category = 1;

}

MusicalEnsemble(Int members, Int category) {

this, members = members; this, category = category;

}

}

class Orkestr extends Musical Ensemble {

String controler;

Int bassoon Length;

Orkestr (Int members, String controler, Int bassoon Length) {

this. members = members;

this. controler = controler;

this. bassoonLength;

}

}

Кожний конструктор починається з неявного виклику кон­структора суперкласу з порожнім списком параметрів. Якщо для класу маємо невизначений конструктор з порожнім списком па­раметрів, то Java визначає неявний конструктор, який встановлює всі змінні в нулі, порожні рядки (null). Будь-який конструктор свого суперкласу:

//конструктор має те саме ім'я, що й клас Orkestr (Int members, String controler, Int bassoonLength) { //виклик конструктора суперкласу, передавання параметрів для призначення//змінним members і category super (members,!); this. controler = controler; this. bassoon Length = bassoon Length; }

Тут використовуються два особливих слова: This і super. This розглядається як ім'я примірника всередині примірника. Слово this необхідне для уникнення плутанини, коли клас і його «батько» мають методи з однаковими іменами.

Ключове слово super посилається безпосередньо на батьківсь­кий клас. Виклик super має з'явитися в першому рядку конструк­тора похідного класу.