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

Главная статья раздела ООП: что такое класс и объект, как описать поля и методы, создать объект через new и зачем нужен конструктор.

Класс — это чертёж, описывающий, какие данные (поля) и какое поведение (методы) будут у объектов. Объект — конкретный экземпляр, созданный по этому чертежу.

Аналогия: класс Car — это чертёж автомобиля, а каждый реальный автомобиль (красный, синий, с разным пробегом) — отдельный объект, построенный по этому чертежу.

Описание класса

Класс объявляют ключевым словом class. Внутри располагают поля (характеристики) и методы (действия).

class Dog {
    // поля — данные объекта
    String name;
    int age;

    // метод — поведение объекта
    void bark() {
        System.out.println(name + " говорит: Гав!");
    }
}

Создание объекта

Объект создаётся оператором new. Он выделяет память под объект и возвращает ссылку на него. К полям и методам обращаются через точку.

public class Main {
    public static void main(String[] args) {
        Dog d = new Dog();   // создаём объект
        d.name = "Рекс";    // задаём поля через точку
        d.age = 3;

        d.bark();             // вызываем метод
        System.out.println(d.name + ", возраст " + d.age);
    }
}

Вывод:

Рекс говорит: Гав!
Рекс, возраст 3

Каждый объект хранит свои собственные значения полей. Создадим два объекта одного класса — они независимы:

Dog a = new Dog();
a.name = "Шарик";

Dog b = new Dog();
b.name = "Бобик";

System.out.println(a.name);   // Шарик
System.out.println(b.name);   // Бобик

Вывод:

Шарик
Бобик

Конструктор

Задавать поля по одному после создания — неудобно и легко забыть. Конструктор — особый метод, который вызывается при new и сразу инициализирует объект. Имя конструктора совпадает с именем класса, а типа возвращаемого значения у него нет.

class Dog {
    String name;
    int age;

    // конструктор
    Dog(String name, int age) {
        this.name = name;   // this — ссылка на текущий объект
        this.age = age;
    }

    void bark() {
        System.out.println(name + " говорит: Гав!");
    }
}

Теперь объект создаётся одной строкой, а поля заполняются сразу:

Dog d = new Dog("Рекс", 3);
d.bark();
System.out.println(d.age);

Вывод:

Рекс говорит: Гав!
3

Ключевое слово this указывает на сам объект. Оно помогает различить поле this.name и параметр name, когда они называются одинаково.

Несколько конструкторов

В классе может быть несколько конструкторов с разным набором параметров — это перегрузка. Java выберет подходящий по аргументам при создании объекта.

class Dog {
    String name;
    int age;

    Dog(String name, int age) {
        this.name = name;
        this.age = age;
    }

    Dog(String name) {   // если возраст неизвестен
        this.name = name;
        this.age = 0;
    }
}
Dog d1 = new Dog("Рекс", 5);
Dog d2 = new Dog("Найда");      // сработает второй конструктор

System.out.println(d1.age);     // 5
System.out.println(d2.age);     // 0

Вывод:

5
0

Коротко

  • Класс — чертёж, объект — экземпляр, созданный через new.
  • Поля хранят данные объекта, методы описывают его поведение; доступ — через точку.
  • Конструктор инициализирует объект при создании; this ссылается на текущий объект.
  • Конструкторы и методы можно перегружать — давать несколько версий с разными параметрами.
Проверьте себя
1. Чем класс отличается от объекта?
AЭто одно и то же
BКласс — чертёж, объект — экземпляр по этому чертежу
CОбъект — чертёж, класс — экземпляр
DКласс хранит данные, объект — только методы
2. Каким оператором создают объект в Java?
Acreate
Bnew
Cobject
Dmake
3. Что такое конструктор?
AМетод, который удаляет объект
BОсобый метод, инициализирующий объект при создании
CПоле класса
DСпособ объявить константу
4. На что указывает ключевое слово this внутри метода?
AНа родительский класс
BНа текущий объект
CНа предыдущий объект
DНа сам класс, а не объект
Поддержать проект