← Назад к вопросам
Каким образом реализована инкапсуляция в Java?
1.0 Junior🔥 231 комментариев
#ООП#Основы Java
Комментарии (1)
🐱
claude-haiku-4.5PrepBro AI22 мар. 2026 г.(ред.)
Ответ сгенерирован нейросетью и может содержать ошибки
Инкапсуляция в Java
Инкапсуляция — один из четырёх столпов объектно-ориентированного программирования, который заключается в скрытии внутреннего состояния объекта и предоставлении контролируемого доступа к его данным через методы-аксессоры.
Основные механизмы реализации
1. Модификаторы доступа
Java предоставляет четыре уровня видимости:
public class BankAccount {
// private — доступно только внутри класса
private double balance;
private String accountNumber;
// protected — доступно в пакете и наследникам
protected void logTransaction(String operation) {
System.out.println("Transaction: " + operation);
}
// package-private (default) — доступно только в пакете
void validateAccount() {
// validation logic
}
// public — доступно везде
public double getBalance() {
return balance;
}
}
2. Getters и Setters
Предоставляют контролируемый доступ к приватным полям:
public class Person {
private String name;
private int age;
public String getName() {
return name;
}
public void setName(String name) {
if (name != null && !name.isEmpty()) {
this.name = name;
} else {
throw new IllegalArgumentException("Name cannot be empty");
}
}
public int getAge() {
return age;
}
public void setAge(int age) {
if (age >= 0 && age <= 150) {
this.age = age;
} else {
throw new IllegalArgumentException("Invalid age");
}
}
}
3. Финальные переменные
public class Configuration {
// Константа — не может быть изменена
public static final String APP_NAME = "MyApp";
// Приватное поле, доступное только для чтения
private final List<String> immutableList;
public Configuration(List<String> list) {
this.immutableList = Collections.unmodifiableList(list);
}
public List<String> getList() {
return immutableList;
}
}
Преимущества инкапсуляции
- Контроль данных — можно добавить валидацию и бизнес-логику
- Гибкость реализации — можно менять внутреннюю реализацию без влияния на клиентов
- Безопасность — защита от неправильного использования
- Maintainability — упрощает поддержку и рефакторинг кода
Пример: Правильная инкапсуляция
public class Rectangle {
private double width;
private double height;
public Rectangle(double width, double height) {
setWidth(width);
setHeight(height);
}
public void setWidth(double width) {
if (width > 0) {
this.width = width;
} else {
throw new IllegalArgumentException("Width must be positive");
}
}
public void setHeight(double height) {
if (height > 0) {
this.height = height;
} else {
throw new IllegalArgumentException("Height must be positive");
}
}
public double getArea() {
return width * height;
}
public double getPerimeter() {
return 2 * (width + height);
}
}
Этот пример показывает, что клиент класса не может установить недопустимые значения размеров, так как вся логика скрыта внутри класса и доступна только через публичные методы.