Инкапсуляция (Encapsulation) — это один из четырех основных принципов объектно-ориентированного программирования (ООП), наряду с наследованием, полиморфизмом и абстракцией. Инкапсуляция позволяет скрыть внутреннюю реализацию объекта от внешнего мира, предоставляя доступ к данным только через строго определенные методы. Это обеспечивает контроль над тем, как данные изменяются и используются, что делает код более безопасным, гибким и удобным для поддержки.
В Java инкапсуляция реализуется с помощью модификаторов доступа (private
, protected
, public
) и методов доступа (геттеров и сеттеров).
Модификаторы доступа определяют уровень видимости полей и методов:
private
: Поле или метод доступны только внутри класса.protected
: Поле или метод доступны внутри класса, в подклассах и в пределах одного пакета.public
: Поле или метод доступны из любого места.Геттеры и сеттеры — это методы, которые предоставляют контролируемый доступ к полям класса:
class Person {
// Приватные поля (скрыты от внешнего доступа)
private String name;
private int age;
// Конструктор
public Person(String name, int age) {
this.name = name;
this.age = age;
}
// Геттер для имени
public String getName() {
return name;
}
// Сеттер для имени
public void setName(String name) {
if (name != null && !name.isEmpty()) { // Проверка на валидность
this.name = name;
} else {
System.out.println("Имя не может быть пустым.");
}
}
// Геттер для возраста
public int getAge() {
return age;
}
// Сеттер для возраста
public void setAge(int age) {
if (age > 0 && age < 120) { // Проверка на валидность
this.age = age;
} else {
System.out.println("Возраст должен быть в диапазоне от 1 до 119.");
}
}
}
public class Main {
public static void main(String[] args) {
Person person = new Person("Иван", 30);
// Доступ к данным через геттеры
System.out.println("Имя: " + person.getName());
System.out.println("Возраст: " + person.getAge());
// Попытка установить невалидные данные через сеттеры
person.setName(""); // Имя не может быть пустым
person.setAge(150); // Возраст должен быть в диапазоне от 1 до 119
// Установка валидных данных
person.setName("Петр");
person.setAge(25);
System.out.println("Обновленное имя: " + person.getName());
System.out.println("Обновленный возраст: " + person.getAge());
}
}
name
и age
объявлены как private
, что делает их недоступными напрямую извне класса.getName
, getAge
) и сеттеры (setName
, setAge
).Инкапсуляция применяется практически в любом классе, где необходимо:
private
, public
, protected
) и методов доступа (геттеров и сеттеров).Использование инкапсуляции делает код более надежным, понятным и готовым к изменениям, что является важным аспектом профессиональной разработки на Java.