Классы и объекты в 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ссылается на текущий объект. - Конструкторы и методы можно перегружать — давать несколько версий с разными параметрами.