— Привіт, Аміго! Зараз я розповім тобі про процес створення об'єкта.
— А що там складного? Написав new ім'я класу, вказав правильний конструктор і готово!
— Це так. Але що при цьому відбувається всередині об'єкта?
— А що там відбувається?
— А ось що! Об'єкт створюється у кілька етапів.
1) Спочатку виділяється пам'ять під усі змінні – поля класу.
2) Потім йде ініціалізація базового класу.
3) Після цього усім змінним присвоюються значення, якщо вони вказані.
4) І зрештою, викликається конструктор.
— Виглядає не дуже складно: спочатку змінні, потім конструктор.
— Погляньмо, як це буде працювати на прикладі двох класів:
Код | Опис |
---|---|
|
Ми створили два класи: Pet(домашній улюбленець) та Cat(кіт).
У класі Cat ми бачимо явний виклик конструктора базового класу. Ось що станеться після виділення пам'яті: далі розпочнеться процес ініціалізації класу Cat |
|
— Щось трохи заплутано. Чому так складно?
— У дійсності не складно, якщо знати, що насправді відбувається:
Якщо клас не має жодного конструктора, він буде створений автоматично.
Конструктор за замовчуванням | |
---|---|
|
|
Якщо не викликаєш конструктор базового класу, його виклик буде додано автоматично.
Виклик конструктора базового класу | |
---|---|
|
|
|
|
Ініціалізація змінних класу відбувається в конструкторі.
Ініціалізація змінних класу | |
---|---|
|
|
Як все це відбувається насправді | |
---|---|
|
|
— Тепер набагато зрозуміліше: спочатку базовий клас, потім змінні поза конструктором, потім виклик коду конструктора.
— Молодець, саме так!