Назад к вопросам
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");
}
}
}
Такой подход делает код более надежным и поддерживаемым.