# Классы и объекты Класс описывается блоком с полями и методами: ``` 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)