Ответ
Модификаторы видимости (public, protected, private) реализуют принцип инкапсуляции — сокрытия внутреннего состояния объекта и деталей реализации от внешнего мира.
Цели:
- Защита инвариантов объекта: Предотвращение попадания объекта в неконсистентное состояние извне.
- Упрощение интерфейса: Пользователю класса предоставляется только контракт (
publicметоды), скрывая сложную внутреннюю кухню. - Гибкость для изменений: Внутреннюю реализацию (
private/protectedполя и методы) можно менять, не ломая код, который зависит только отpublicинтерфейса.
Пример на Java/C#-подобном синтаксисе:
class BankAccount {
// private: Только этот класс имеет прямой доступ.
// Запрещено менять баланс в обход методов.
private double balance;
private String accountNumber;
// protected: Доступ для этого класса и наследников.
protected String currency = "USD";
// public: Интерфейс для внешнего мира.
public BankAccount(String number, double initialDeposit) {
this.accountNumber = number;
this.balance = initialDeposit;
}
public void deposit(double amount) {
if (amount > 0) {
balance += amount; // Внутренний доступ разрешён
logTransaction("DEPOSIT", amount);
}
}
public double getBalance() {
return balance; // Возвращаем копию или значение, но не ссылку на поле
}
// private метод: вспомогательная логика, скрытая отвне.
private void logTransaction(String type, double amount) {
// Запись в лог...
}
}
// Использование:
BankAccount acc = new BankAccount("12345", 100.0);
acc.deposit(50.0); // OK
// acc.balance = 1000000; // ОШИБКА КОМПИЛЯЦИИ: поле private
// acc.logTransaction(...); // ОШИБКА: метод private
double currentBalance = acc.getBalance(); // OK, публичный геттер