— Привет, Амиго! Сейчас я расскажу тебе о процессе создания объекта.
— А что там сложного, дядя Риша? Написал new имя класса, указал правильный конструктор и готово!
— Это так. Но что при этом происходит внутри объекта?
— А что там происходит?
— А вот что! Объект создается в несколько этапов.
1) Сначала выделяется память под все переменные – поля класса.
2) Затем идет инициализация базового класса.
3) Потом всем переменным присваиваются значения, если они указаны.
4) И наконец, вызывается конструктор.
— Выглядит не очень сложно: сначала переменные, затем конструктор.
— Давай посмотрим, как это будет работать на примере двух классов:
Код | Описание |
---|---|
|
Мы создали два класса: Pet(животное) и Cat(кот).
В классе Cat мы видим явный вызов конструктора базового класса. Вот что произойдет после выделения памяти: далее начнется процесс инициализации класса Cat |
|
— Что-то немного запутанно. Почему так сложно?
— На самом деле не сложно, если знать что на самом деле происходит:
Если у класса нет ни одного конструктора, он будет создан автоматически.
Конструктор по умолчанию | |
---|---|
|
|
Если не вызываешь конструктор базового класса, его вызов будет добавлен автоматически.
Вызов конструктора базового класса | |
---|---|
|
|
|
|
Инициализация переменных класса происходит в конструкторе.
Инициализация переменных класса | |
---|---|
|
|
Как все это происходит на самом деле | |
---|---|
|
|
— Теперь намного понятнее: сначала базовый класс, затем переменные вне конструктора, затем вызов кода конструктора.
— Молодец, Амиго, именно так!
ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ