Ответ
Открытые поля нарушают принцип инкапсуляции — один из ключевых принципов ООП. Это приводит к проблемам с поддержкой, контролем состояния и безопасностью.
Проблемы открытых полей:
- Отсутствие контроля: Невозможно валидировать данные при присваивании.
- Сложность рефакторинга: Изменение внутренней реализации класса затронет весь код, который напрямую обращается к полю.
- Нарушение инвариантов: Внешний код может перевести объект в некорректное состояние.
Правильный подход (Инкапсуляция):
class Person {
// Поле закрыто для прямого доступа
private String name;
private int age;
// Контролируемый доступ через методы (геттеры/сеттеры)
public String getName() { return name; }
public void setName(String name) {
if (name == null || name.trim().isEmpty()) {
throw new IllegalArgumentException("Name cannot be empty");
}
this.name = name;
}
public int getAge() { return age; }
public void setAge(int age) {
if (age < 0) {
throw new IllegalArgumentException("Age cannot be negative");
}
this.age = age;
}
}
Исключение: Константы (public static final) — допустимы, так как их состояние неизменно.
public static final double PI = 3.14159;