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

В этом руководстве вы узнаете об инкапсуляции и сокрытии данных в Java с помощью примеров.

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

Инкапсуляция - одна из ключевых особенностей объектно-ориентированного программирования. Инкапсуляция относится к объединению полей и методов внутри одного класса.

Это предотвращает доступ внешних классов к полям и методам класса и их изменение. Это также помогает добиться сокрытия данных .

Пример 1: инкапсуляция Java

 class Area ( // fields to calculate area int length; int breadth; // constructor to initialize values Area(int length, int breadth) ( this.length = length; this.breadth = breadth; ) // method to calculate area public void getArea() ( int area = length * breadth; System.out.println("Area: " + area); ) ) class Main ( public static void main(String() args) ( // create object of Area // pass value of length and breadth Area rectangle = new Area(5, 6); rectangle.getArea(); ) )

Вывод

 Площадь: 30

В приведенном выше примере мы создали класс с именем Area. Основное назначение этого класса - расчет площади.

Для вычисления площади, нам нужны две переменные: длина и ширина и метод: getArea(). Следовательно, мы объединили эти поля и методы в один класс.

Здесь к полям и методам можно получить доступ и из других классов. Следовательно, это не сокрытие данных .

Это всего лишь инкапсуляция . Мы просто держим одинаковые коды вместе.

Примечание . Люди часто рассматривают инкапсуляцию как сокрытие данных, но это не совсем так.

Инкапсуляция относится к объединению связанных полей и методов вместе. Это можно использовать для сокрытия данных. Сама по себе инкапсуляция не является сокрытием данных.

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

  • В Java инкапсуляция помогает нам хранить связанные поля и методы вместе, что делает наш код более чистым и легким для чтения.
  • Это помогает контролировать значения наших полей данных. Например,
     class Person ( private int age; public void setAge(int age) ( if (age>= 0) ( this.age = age; ) ) )

    Здесь мы создаем переменную возраста privateи применяем логику внутри setAge()метода. Итак, возраст не может быть отрицательным.
  • Методы получения и установки обеспечивают доступ только для чтения или записи к полям нашего класса. Например,
     getName() // provides read-only access setName() // provides write-only access
  • Это помогает разделить компоненты системы. Например, мы можем инкапсулировать код в несколько пакетов.
    Эти разделенные компоненты (связки) можно разрабатывать, тестировать и отлаживать независимо и одновременно. И любые изменения в конкретном компоненте не влияют на другие компоненты.
  • Мы также можем добиться сокрытия данных с помощью инкапсуляции. В приведенном выше примере, если мы изменим переменную длины и ширины на частную, то доступ к этим полям будет ограничен.
    И они скрыты от внешних классов. Это называется сокрытием данных .

Скрытие данных

Скрытие данных - это способ ограничения доступа наших членов данных путем сокрытия деталей реализации. Инкапсуляция также позволяет скрыть данные.

Мы можем использовать модификаторы доступа для сокрытия данных. Например,

Пример 2: Скрытие данных с использованием частного спецификатора

 class Person ( // private field private int age; // getter method public int getAge() ( return age; ) // setter method public void setAge(int age) ( this.age = age; ) ) class Main ( public static void main(String() args) ( // create an object of Person Person p1 = new Person(); // change age using setter p1.setAge(24); // access age using getter System.out.println("My age is " + p1.getAge()); ) )

Вывод

 Мой возраст 24

В приведенном выше примере у нас есть privateвозраст поля. Поскольку это так private, к нему нельзя получить доступ извне класса.

Чтобы получить доступ к возрасту, мы использовали publicметоды: getAge()и setAge(). Эти методы называются методами получения и установки.

Закрытие возраста позволило нам ограничить несанкционированный доступ извне. Это сокрытие данных .

Если мы попытаемся получить доступ к полю возраста из класса Main, мы получим ошибку.

 // error: age has private access in Person p1.age = 24;

Интересные статьи...