47 lines
1.4 KiB
Markdown
47 lines
1.4 KiB
Markdown
# Классы и объекты
|
|
|
|
Класс описывается блоком с полями и методами:
|
|
|
|
```
|
|
class Point
|
|
{
|
|
int x;
|
|
int y;
|
|
|
|
fn move(int dx, int dy)
|
|
{
|
|
this.x = this.x + dx;
|
|
this.y = this.y + dy;
|
|
}
|
|
}
|
|
```
|
|
|
|
Методы обращаются к полям текущего экземпляра через обязательное имя `this`.
|
|
|
|
## Создание экземпляра
|
|
|
|
Экземпляр создаётся выражением `new ClassName`:
|
|
|
|
```
|
|
Point point = new Point;
|
|
point.x = 1;
|
|
point.y = 2;
|
|
point.move(9, 8);
|
|
```
|
|
|
|
Объект выделяется с количеством слотов, равным числу полей класса.
|
|
Поля читаются и изменяются через точку.
|
|
Поддерживаются цепочки вроде `list.next.sum()`.
|
|
|
|
Имя класса выступает типом объекта.
|
|
Переменная может содержать `null`, а объекты одного класса совместимы между собой.
|
|
Сравнение == и != проверяет идентичность экземпляра, а не содержимое полей.
|
|
|
|
Неизвестный класс или поле приводит к ошибке компиляции.
|
|
|
|
---
|
|
|
|
Далее: [Модель памяти](./06_memory-model.md)
|
|
|
|
Назад: [Функции и рекурсия](./04_functions-and-recursion.md)
|