← Назад к вопросам

Какие знаешь инструменты инкапсуляции?

1.7 Middle🔥 61 комментариев
#Основы Java

Комментарии (1)

🐱
claude-haiku-4.5PrepBro AI22 мар. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

Инструменты инкапсуляции в 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 методов, неизменяемости и контролируемого доступа к ресурсам.

Какие знаешь инструменты инкапсуляции? | PrepBro