Учебники по Java

Ява ГЛАВНАЯ Введение в Java Начало работы с Java Синтаксис Java Java-комментарии Java-переменные Типы данных Java Приведение типов Java Операторы Java Java-строки Java-математика Логические значения Java Java, если...иначе Java-переключатель Java-цикл во время выполнения Java для цикла Перерыв/продолжение Java Массивы Java

Java-методы

Java-методы Параметры метода Java Перегрузка метода Java Область применения Java Java-рекурсия

Java-классы

Java ООП Классы/объекты Java Атрибуты класса Java Методы класса Java Конструкторы Java Модификаторы Java Инкапсуляция Java Java-пакеты/API Наследование Java Java-полиморфизм Внутренние классы Java Java-абстракция Java-интерфейс Перечисления Java Пользовательский ввод Java Дата Java Список массивов Java Связанный список Java Java HashMap Набор хэшей для Java Java-итератор Классы-оболочки Java Исключения Java Java регулярное выражение Java-потоки Java-лямбда

Обработка файлов Java

Java-файлы Создание/запись файлов Java Файлы чтения Java Java Удалить файлы

Java Как

Добавить два числа

Справочник по Java

Ключевые слова Java Строковые методы Java Java математические методы

Примеры Java

Примеры Java Компилятор Java Java-упражнения Java-викторина Java-сертификат


Инкапсуляция Java


Инкапсуляция

Смысл инкапсуляции в том, чтобы убедиться, что «конфиденциальные» данные скрыты от пользователей. Чтобы достичь этого, вы должны:

  • объявить переменные/атрибуты класса как private
  • предоставить общедоступные методы получения и установки для доступа и обновления значения private переменной

Получить и установить

Из предыдущей главы вы узнали, что privateдоступ к переменным возможен только внутри одного и того же класса (внешний класс не имеет к ним доступа). Однако к ним можно получить доступ, если мы предоставим общедоступные методы get и set .

Метод getвозвращает значение переменной, а setметод устанавливает значение.

Синтаксис для обоих таков, что они начинаются с или getили set, за которым следует имя переменной с первой буквой в верхнем регистре:

Пример

public class Person {
  private String name; // private = restricted access

  // Getter
  public String getName() {
    return name;
  }

  // Setter
  public void setName(String newName) {
    this.name = newName;
  }
}

Объяснение примера

Метод getвозвращает значение переменной name.

Метод setпринимает параметр ( newName) и присваивает его nameпеременной. Ключевое thisслово используется для ссылки на текущий объект.

Однако, поскольку nameпеременная объявлена ​​как private, мы не можем получить к ней доступ вне этого класса:

Пример

public class Main {
  public static void main(String[] args) {
    Person myObj = new Person();
    myObj.name = "John";  // error
    System.out.println(myObj.name); // error 
  }
}

Если бы переменная была объявлена ​​как public, мы ожидали бы следующий вывод:

John

Однако, когда мы пытаемся получить доступ к privateпеременной, мы получаем ошибку:

MyClass.java:4: error: name has private access in Person
    myObj.name = "John";
         ^
MyClass.java:5: error: name has private access in Person
    System.out.println(myObj.name);
                  ^
2 errors

Вместо этого мы используем методы getName()и setName()для доступа и обновления переменной:

Пример

public class Main {
  public static void main(String[] args) {
    Person myObj = new Person();
    myObj.setName("John"); // Set the value of the name variable to "John"
    System.out.println(myObj.getName());
  }
}

// Outputs "John"


Почему инкапсуляция?

  • Улучшенный контроль над атрибутами и методами класса
  • Атрибуты класса можно сделать доступными только для чтения (если вы используете только getметод) или только для записи (если вы используете только setметод) .
  • Гибкость: программист может изменить одну часть кода, не затрагивая другие части.
  • Повышенная безопасность данных