Как реализуется инкапсуляция в Java?

«Как реализуется инкапсуляция в Java?» — вопрос из категории ООП, который задают на 10% собеседований Java Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Инкапсуляция в Java — это механизм сокрытия внутреннего состояния объекта и деталей реализации, предоставляющий контролируемый доступ через публичный интерфейс.

Основные инструменты:

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

Пример класса с инкапсуляцией:

public class BankAccount {
    // Приватное поле — деталь реализации скрыта
    private double balance;

    // Публичный геттер для контролируемого доступа
    public double getBalance() {
        return balance;
    }

    // Публичный сеттер с валидацией
    public void deposit(double amount) {
        if (amount > 0) {
            this.balance += amount;
        } else {
            throw new IllegalArgumentException("Amount must be positive");
        }
    }
}

Преимущества:

  1. Контроль над данными: Валидация и логика в сеттерах.
  2. Гибкость реализации: Внутреннюю структуру класса можно менять, не ломая клиентский код.
  3. Сокрытие сложности: Пользователь класса работает с простым API, не зная внутренней логики.