В предыдущих статьях было весьма и весьма непросто обходить тему классов и объектов, ведь Java – объектно-ориентированный язык программирования. Он по определению строится вокруг понятия классов и объектов. Наконец-то мы с вами разберёмся, что это такое и зачем они нужны.
Содержание:
Классы
Класс в Java – это чертёж, который описывает шаблон состояния и поведения объектов, которые будут созданы по его образу и подобию. Класс определяет атрибуты (поля) и методы (функции), которые объект этого класса может иметь. Классы, по сути дела, позволяют абстрагироваться от реальных сущностей. С помощью классов можно создавать модели, которые отражают объекты из реального мира. Например, класс Car может представлять автомобиль, класс Student – студента, а класс HtmlPage – страницу HTML.
1 2 3 4 5 6 7 8 9 |
/** * учебный предмет, изучаемый в университете * * @author Катя Левкович * @version 1.0, 06.09.2023 */ public class AcademicSubject { } |
Здесь перед классом у меня расположен javadoc-комментарий – один из трёх видов комментариев в Java.
Объекты
Объект – это мыслимая или реальная сущность, обладающая собственным состоянием и поведением. Каждый объект имеет текущее состояние и обладает чётко определённым поведением. Объект создаётся по чертежу класса, становясь его экземпляром. Когда вы создаёте объект, вы создаёте переменную этого типа (класса). Она может хранить данные и вызывать поведение, описанное в классе. Объекты в Java являются ссылочными типами.
Объект создаётся при помощи ключевого слова new.
1 2 3 4 5 6 |
public class MyProject { public static void main(String[] args) { AcademicSubject math = new AcademicSubject(); AcademicSubject literature = new AcademicSubject(); } } |
Модификаторы
Модификаторы доступа в Java бывают:
- public – Метод или поле доступны из любого места.
- protected – Метод или поле доступны внутри класса и его подклассов.
- private – Метод или поле доступны только внутри класса.
- package-private (по умолчанию, если модификатор не задан) – Метод или поле доступны только внутри того же пакета.
Другие модификаторы Java (не доступа):
- Модификатор static делает метод или поле общим для всех объектов класса, а не привязанным к конкретному объекту.
- Модификатор final делает переменную неизменной. Значение ей можно присвоить лишь однажды, и затем – лишь читать это значение.
1 2 3 4 5 6 7 8 |
public class CustomClass { private int privateField; protected int protectedField; public int publicField; public static int publicStaticField; public final int publicFinalField = 14; } |
1 2 3 4 5 6 7 8 9 |
public class MyProject { public static void main(String[] args) { CustomClass customObject = new CustomClass(); int value = customObject.publicFinalField; customObject.publicField = 2; customObject.publicStaticField = 3; CustomClass.publicStaticField = 4; } } |
Извне класса CustomClass мы можем получить доступ только к переменным, помеченным модификатором public. Это publicField, publicStaticField и publicFinalField. К переменным, помеченным модификаторами private и protected доступ извне получить не удаётся.
Так как поле publicStaticField статическое (модификатор static), то обращаться к нему можно не только через созданный объект customObject, но и через весь класс CustomClass без создания объекта.
Поле, помеченное модификатором final, изменить уже нельзя:
Поля
Поля – это переменные, которые хранят данные объекта. Они определяют характеристики, состояние объекта.
1 2 3 4 5 6 7 8 9 10 11 12 |
/** * учебный предмет, изучаемый в университете * * @author Катя Левкович * @version 1.1, 06.09.2023 */ public class AcademicSubject { private String name; private String department; private int lectureHours; private int practiceHours; } |
Методы
Методы – это функции, записанные в классе, которые определяют поведение объекта.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 |
/** * учебный предмет, изучаемый в университете * * @author Катя Левкович * @version 1.2, 06.09.2023 */ public class AcademicSubject { private String name; private String department; private int lectureHours; private int practiceHours; /** * рассчитать количество часов дисциплины всего * (и лекций, и практик) */ public int getTotalHours() { return lectureHours + practiceHours; } /** * сформировать текстовое описание дисциплины */ public String getDescription() { return "Предмет '" + name + "' (" + department + "), " + lectureHours + " ч лекций, " + practiceHours + " ч практик"; } } |
Конструкторы
Конструкторы – это специальные методы, которые вызываются при создании нового объекта. Они заполняют поля объекта значениями, приводя объект в начальное состояние.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 |
/** * учебный предмет, изучаемый в университете * * @author Катя Левкович * @version 1.3, 06.09.2023 */ public class AcademicSubject { private String name; private String department; private int lectureHours; private int practiceHours; public AcademicSubject(String name, String department, int lectureHours, int practiceHours) { this.name = name; this.department = department; this.lectureHours = lectureHours; this.practiceHours = practiceHours; } /** * рассчитать количество часов дисциплины всего * (и лекций, и практик) */ public int getTotalHours() { return lectureHours + practiceHours; } /** * сформировать текстовое описание дисциплины */ public String getDescription() { return "Предмет '" + name + "' (" + department + "), " + lectureHours + " ч лекций, " + practiceHours + " ч практик"; } } |
this – это ключевое слово в Java, которое используется для ссылки на текущий объект внутри метода или конструктора класса. Оно может быть полезным, чтобы разрешить неоднозначность между именем параметра метода и именем поля класса, а также для передачи текущего объекта в другие методы или конструкторы.
В приведённом коде конструктора у полей класса те же названия (name, department, lectureHours, practiceHours), как и у параметров конструктора. Чтобы компилятор знал, какие где используются переменные, при указании на поля класса используется ключевое слово this.
Геттеры и сеттеры
Геттеры и сеттеры – это методы, которые позволяют получать и устанавливать значения полей объекта. Если говорить упрощённо, то по правилам хорошего тона нужно ставить private везде, где возможно. Обычно все поля класса делаются private, и выборочный доступ к ним предоставляется с помощью геттеров и сеттеров.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 |
/** * учебный предмет, изучаемый в университете * * @author Катя Левкович * @version 1.4, 06.09.2023 */ public class AcademicSubject { private String name; private String department; private int lectureHours; private int practiceHours; public AcademicSubject(String name, String department, int lectureHours, int practiceHours) { this.name = name; this.department = department; this.lectureHours = lectureHours; this.practiceHours = practiceHours; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getDepartment() { return department; } public void setDepartment(String department) { this.department = department; } public int getLectureHours() { return lectureHours; } public void setLectureHours(int lectureHours) { this.lectureHours = lectureHours; } public int getPracticeHours() { return practiceHours; } public void setPracticeHours(int practiceHours) { this.practiceHours = practiceHours; } /** * рассчитать количество часов дисциплины всего * (и лекций, и практик) */ public int getTotalHours() { return lectureHours + practiceHours; } /** * сформировать текстовое описание дисциплины */ public String getDescription() { return "Предмет '" + name + "' (" + department + "), " + lectureHours + " ч лекций, " + practiceHours + " ч практик"; } } |
Теперь создадим объект AcademicSubject и протестируем его:
1 2 3 4 5 6 7 8 9 10 11 |
public class MyProject { public static void main(String[] args) { AcademicSubject math = new AcademicSubject("Математика", "Естественные науки", 16, 32); String subjectNameUpperCase = math.getName().toUpperCase(); System.out.println(subjectNameUpperCase); System.out.println(math.getDescription()); System.out.println("Всего часов: " + math.getTotalHours()); } } |
Это основы классов и объектов в Java. С этой информацией вы сможете создавать классы, определяя поля и методы. Эти классы будут использоваться для создания объектов и выполнения операций с данными. Классы и их взаимоотношения удобно моделировать с помощью UML-диаграмм классов.
Однако это только техническая часть вопроса. Не просто же так Java – объектно-ориентированный язык. Во главе всего стоит идея, концепция, парадигма, абстракция. То, что мы рассмотрели в этой статье – это лишь инструмент для реализации этой концепции. Какова же она? Это ООП – объектно-ориентированное программирование. Это не просто классы и объекты. Это нечто большее. А что – это уже совсем другая история.
Уведомление: Как делать запросы к API на Java с ПК
Уведомление: Как добавить музыку и звуки в приложение Android