Комментарии (1)
Ответ сгенерирован нейросетью и может содержать ошибки
Инструменты инкапсуляции в Java
Инкапсуляция — один из ключевых принципов объектно-ориентированного программирования, который обеспечивает скрытие внутреннего состояния объекта и управление доступом к его полям. В Java существует несколько инструментов для реализации инкапсуляции.
Модификаторы доступа (Access Modifiers)
Основной инструмент инкапсуляции — модификаторы доступа, которые контролируют видимость классов, методов и полей:
- private — доступно только внутри класса. Это наиболее строгий уровень ограничения.
- default (package-private) — видно в пределах одного пакета. Если модификатор не указан, применяется автоматически.
- protected — доступно в пределах пакета и в подклассах (наследниках), даже если они в других пакетах.
- public — доступно везде. Используется для публичного API класса.
Геттеры и сеттеры
Классический подход к инкапсуляции — использование getter и setter методов. Они позволяют контролировать доступ к полям и добавлять валидацию:
public class User {
private String email;
private int age;
public String getEmail() {
return email;
}
public void setEmail(String email) {
if (email != null && email.contains("@")) {
this.email = email;
}
}
public int getAge() {
return age;
}
public void setAge(int age) {
if (age > 0 && age < 150) {
this.age = age;
}
}
}
Записи (Records)
В Java 16+ добавлены records — компактный способ создания неизменяемых классов данных. Они автоматически генерируют конструктор, геттеры и методы equals/hashCode/toString:
public record Person(String name, int age) {
// Автоматически создаются методы: name(), age(), equals, hashCode, toString
}
Person person = new Person("Alice", 30);
String name = person.name();
Финальные поля
Ключевое слово final предотвращает изменение значения поля после инициализации:
public class Configuration {
private final String databaseUrl;
private final int maxConnections;
public Configuration(String url, int maxConnections) {
this.databaseUrl = url;
this.maxConnections = maxConnections;
}
public String getDatabaseUrl() {
return databaseUrl;
}
}
Неизменяемые коллекции
Для защиты коллекций используются неизменяемые обёртки:
public class Team {
private final List<String> members = new ArrayList<>();
public List<String> getMembers() {
return Collections.unmodifiableList(members);
}
public void addMember(String member) {
members.add(member);
}
}
Вложенные классы
Вложенные классы (inner classes) могут скрывать реализацию сложных деталей:
public class OuterClass {
private int value = 10;
private class InnerClass {
public int getValue() {
return value;
}
}
}
Интерфейсы и абстрактные классы
Интерфейсы скрывают реализацию за публичным контрактом:
public interface PaymentProcessor {
void processPayment(double amount);
}
public class CreditCardProcessor implements PaymentProcessor {
@Override
public void processPayment(double amount) {
// Реализация скрыта
}
}
Инкапсуляция в Java реализуется через комбинацию модификаторов доступа, getter/setter методов, неизменяемости и контролируемого доступа к ресурсам.