Sobes.tech
Назад к вопросам
Junior
26

Поля address и phone — public. Почему в Java не любят публичные поля? Что реально меняется при переходе к private + getter/setter?

Компании, где спрашивали
ИП Ганус Александр Андреевич

Ответ от нейросети

sobes.tech AI

В Java публичные поля не рекомендуются, потому что они нарушают принцип инкапсуляции — одну из основ объектно-ориентированного программирования. При использовании public полей:

  • Нет контроля над тем, как и когда изменяются данные.
  • Невозможно добавить логику при чтении или записи (например, валидацию).
  • Трудно менять внутреннюю реализацию класса без влияния на внешний код.

Переход к private полям с getter/setter позволяет:

  • Контролировать доступ к полям (например, сделать поле только для чтения).
  • Добавлять дополнительную логику при получении или установке значения (валидация, преобразование).
  • Сохранять совместимость при изменении внутренней структуры класса.

Пример:

public class User {
    private String phone;

    public String getPhone() {
        return phone;
    }

    public void setPhone(String phone) {
        if (phone != null && phone.matches("\\+\\d{11}")) {
            this.phone = phone;
        } else {
            throw new IllegalArgumentException("Invalid phone number");
        }
    }
}

Такой подход делает код более надежным и поддерживаемым.