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

В предыдущих статьях было весьма и весьма непросто обходить тему классов и объектов, ведь Java – объектно-ориентированный язык программирования. Он по определению строится вокруг понятия классов и объектов. Наконец-то мы с вами разберёмся, что это такое и зачем они нужны.

Классы

Класс в Java – это чертёж, который описывает шаблон состояния и поведения объектов, которые будут созданы по его образу и подобию. Класс определяет атрибуты (поля) и методы (функции), которые объект этого класса может иметь. Классы, по сути дела, позволяют абстрагироваться от реальных сущностей. С помощью классов можно создавать модели, которые отражают объекты из реального мира. Например, класс Car может представлять автомобиль, класс Student – студента, а класс HtmlPage – страницу HTML.

Здесь перед классом у меня расположен javadoc-комментарий – один из трёх видов комментариев в Java.

Объекты

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

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

Модификаторы

Модификаторы доступа в Java бывают:

  • public – Метод или поле доступны из любого места.
  • protected – Метод или поле доступны внутри класса и его подклассов.
  • private – Метод или поле доступны только внутри класса.
  • package-private (по умолчанию, если модификатор не задан) – Метод или поле доступны только внутри того же пакета.
Таблица с модификаторами доступа Java: public, protected, package-private и private

Другие модификаторы Java (не доступа):

  • Модификатор static делает метод или поле общим для всех объектов класса, а не привязанным к конкретному объекту.
  • Модификатор final делает переменную неизменной. Значение ей можно присвоить лишь однажды, и затем – лишь читать это значение.

Извне класса CustomClass мы можем получить доступ только к переменным, помеченным модификатором public. Это publicField, publicStaticField и publicFinalField. К переменным, помеченным модификаторами private и protected доступ извне получить не удаётся.

Так как поле publicStaticField статическое (модификатор static), то обращаться к нему можно не только через созданный объект customObject, но и через весь класс CustomClass без создания объекта.

Поле, помеченное модификатором final, изменить уже нельзя:

Скриншот предупреждения в IntelliJ IDEA о невозможности изменения финальной переменной

Поля

Поля – это переменные, которые хранят данные объекта. Они определяют характеристики, состояние объекта.

Методы

Методы – это функции, записанные в классе, которые определяют поведение объекта.

Конструкторы

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

this – это ключевое слово в Java, которое используется для ссылки на текущий объект внутри метода или конструктора класса. Оно может быть полезным, чтобы разрешить неоднозначность между именем параметра метода и именем поля класса, а также для передачи текущего объекта в другие методы или конструкторы.

В приведённом коде конструктора у полей класса те же названия (name, department, lectureHours, practiceHours), как и у параметров конструктора. Чтобы компилятор знал, какие где используются переменные, при указании на поля класса используется ключевое слово this.

Геттеры и сеттеры

Геттеры и сеттеры – это методы, которые позволяют получать и устанавливать значения полей объекта. Если говорить упрощённо, то по правилам хорошего тона нужно ставить private везде, где возможно. Обычно все поля класса делаются private, и выборочный доступ к ним предоставляется с помощью геттеров и сеттеров.

Теперь создадим объект AcademicSubject и протестируем его:

Скриншот консоли IntelliJ IDEA с информацией об академическом предмете математика

Это основы классов и объектов в Java. С этой информацией вы сможете создавать классы, определяя поля и методы. Эти классы будут использоваться для создания объектов и выполнения операций с данными. Классы и их взаимоотношения удобно моделировать с помощью UML-диаграмм классов.

Однако это только техническая часть вопроса. Не просто же так Java – объектно-ориентированный язык. Во главе всего стоит идея, концепция, парадигма, абстракция. То, что мы рассмотрели в этой статье – это лишь инструмент для реализации этой концепции. Какова же она? Это ООП – объектно-ориентированное программирование. Это не просто классы и объекты. Это нечто большее. А что – это уже совсем другая история.

Добавить комментарий