Карта / ООП / Классы и объекты

Классы и объекты

Представь чертёж дома и сам дом. Класс — это чертёж: он описывает, что у объекта есть и что он умеет. Объект — это уже построенный по чертёжу дом. По одному чертежу можно построить сколько угодно домов — по одному классу создать сколько угодно объектов.

Как это в коде

Сначала описываешь класс (чертёж): какие у него поля и методы. Потом создаёшь объект через new.

class Dog {            // чертёж
  String name;         // поле — что у собаки есть
  void bark() {        // метод — что собака умеет
    System.out.println(name + ": гав!");
  }
}

Dog rex = new Dog();   // построили объект по чертёжу
rex.name = "Рекс";
rex.bark();            // Рекс: гав!

Запомнить на старте:

  • класс пишется с большой буквы (Dog), объект — обычная переменная (rex);
  • new Dog() — момент «постройки» объекта в памяти;
  • к полям и методам объекта обращаешься через точку: rex.name, rex.bark().
Копнуть глубже — как на работе

Вместо того чтобы заполнять поля вручную после создания, объект обычно собирают через конструктор — специальный метод, который вызывается при new:

class Dog {
  String name;
  Dog(String name) {     // конструктор
    this.name = name;
  }
}
Dog rex = new Dog("Рекс");

this — это «текущий объект», ссылка на самого себя. Она нужна, чтобы отличить поле this.name от параметра name. В реальных проектах поля чаще делают private, а доступ дают через методы — это инкапсуляция, следующая подтема.

Под капотом — для глубокого понимания

Переменная rex хранит не сам объект, а ссылку — адрес участка в heap, где объект лежит. Поэтому Dog a = rex копирует не собаку, а адрес: оба имени указывают на один объект, и изменение через один видно через другой. Сам объект живёт в heap до тех пор, пока на него есть хоть одна ссылка; когда ссылок не осталось — его заберёт сборщик мусора (GC). Это объясняет и NullPointerException: переменная-ссылка есть, а объекта за ней нет (null).

🎤 Закрыл тему, если можешь объяснить:
• чем класс отличается от объекта;
• что делает new;
• зачем нужен конструктор (если дошёл до 2-го слоя).