Зарегистрируйтесь для доступа к 15+ бесплатным курсам по программированию с тренажером

Классы Java: Введение в ООП

Разберемся в устройстве классов из которых создают объекты на примере кода:

var user = new User("Danil", "Miloshin");

// метод возвращает имя
user.getFirstName(); // "Danil"
// метод возвращает фамилию
user.getLastName(); // "Miloshin"
// метод возвращает полное имя
user.getFullName(); // "Danil Miloshin"

Первая строчка – это создание объекта из класса. За это отвечает оператор new. Затем идет "вызов" класса как функции с передачей туда аргументов. В реальности класс, конечно же, не вызывается. Вызывается конструктор класса, специальный метод, определенный внутри класса и имеющий такое же имя как и класс:

class User {
    // Возвращаемый тип не указывается, так как конструктор не может ничего возвращать
    // И здесь нет слова static
    User(String firstName, String lastName) {
        // тут код инициализации
    }
}

Конструктор нужен для инициализации объекта. В нашем примере нужно записать данные пользователя так, чтобы они остались внутри даже после завершения выполнения конструктора. Для этого потребуются свойства:

class User {
    public String firstName;
    public String lastName;
}

Свойства выглядят как переменные определенные внутри класса (говорят "на уровне класса") с добавленными к ним модификаторами доступа как у методов. Как они заполняются? Через конструктор, во время создания объекта:

class User {
    public String firstName;
    public String lastName;

    User(String firstName, String lastName) {
        this.firstName = firstName;
        this.lastName = lastName;
    }
}

this указатель на текущий объект. Через него мы можем читать и записывать свойства и даже вызывать методы нашего объекта. Зачем это нужно? Без this код выглядит так var name = value, то есть как установка значения в обычную переменную. Такой код приводил бы к путаннице.

Свойства хранят данные объектов, причем у каждого объекта они свои. Если мы создадим двух пользователей, то между собой они никак не будут взаимодействовать, так как this указывает на конкретный объект:

var user1 = new User("Jonny", "Depp");
var user2 = new User("Selina", "Dion");

// Обращение к свойству
user1.firstName; // "Jonny"
user2.firstName; // "Selina"

Свойства можно не только читать но и менять:

user1.firstName = "Maya";
user1.firstName; // ""

Конструктор по умолчанию

Иногда у объектов начальная инициализация необязательна, либо ее вообще нет. В таком случае определять конструктор не нужно, так как Java определяет для каждого класса конструктор по умолчанию. Это обычный конструктор, но без параметров:

// Пример
class Car {
    public String make;

    // Его не нужно добавлять
    // Java сама создает такой конструктор если нет других
    Car() {

    }
}

var car = new Car();
car.make = "bmw";
System.out.println(car.make); // "bmw"

Перегрузка конструктора

Перегрузка методов распространяется и на конструктор. В зависимости от ситуации можно добавлять любые конструкторы, которые удобно.

class Course {
    public String name;
    public int duration;

    Course(String name, int duration) {
        this.name = name;
        this.duration = duration;
    }

    // Создаем без указания длительности
    Course(String name) {
        this.name = name;
    }
}

// 18 часов
var course1 = new Course("Java", 18);
var course2 = new Course("PHP");

Про перегрузку конструктора полезно знать из-за частого использования в существующих классах, с которыми вам предстоит работать. Поэтому мы ее затрагиваем уже сейчас.


Аватары экспертов Хекслета

Остались вопросы? Задайте их в разделе «Обсуждение»

Вам ответят команда поддержки Хекслета или другие студенты.

Для полного доступа к курсу нужен базовый план

Базовый план откроет полный доступ ко всем курсам, упражнениям и урокам Хекслета, проектам и пожизненный доступ к теории пройденных уроков. Подписку можно отменить в любой момент.

Получить доступ
900
упражнений
2000+
часов теории
3200
тестов

Открыть доступ

Курсы программирования для новичков и опытных разработчиков. Начните обучение бесплатно.

  • 130 курсов, 2000+ часов теории
  • 900 практических заданий в браузере
  • 360 000 студентов
Даю согласие на обработку персональных данных, соглашаюсь с «Политикой конфиденциальности» и «Условиями оказания услуг»

Наши выпускники работают в компаниях:

Логотип компании Альфа Банк
Логотип компании Aviasales
Логотип компании Yandex
Логотип компании Tinkoff
Рекомендуемые программы

С нуля до разработчика. Возвращаем деньги, если не удалось найти работу.

Иконка программы Java-разработчик
Профессия
Разработка приложений на языке Java
30 июня 10 месяцев

Используйте Хекслет по максимуму!

  • Задавайте вопросы по уроку
  • Проверяйте знания в квизах
  • Проходите практику прямо в браузере
  • Отслеживайте свой прогресс

Зарегистрируйтесь или войдите в свой аккаунт

Даю согласие на обработку персональных данных, соглашаюсь с «Политикой конфиденциальности» и «Условиями оказания услуг»