Java капсулиране

В този урок ще научите за капсулирането и скриването на данни в Java с помощта на примери.

Java капсулиране

Капсулирането е една от ключовите характеристики на обектно-ориентираното програмиране. Капсулирането се отнася до групирането на полета и методи в един клас.

Той предотвратява достъпа на външните класове и промяната на полета и методи на клас. Това също помага да се постигне скриване на данни .

Пример 1: Java Encapsulation

 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()метода. Сега възрастта не може да бъде отрицателна.
  • Методите getter и setter осигуряват достъп само за четене или само за запис до нашите полета на класа. Например,
     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(). Тези методи се наричат ​​getter и setter методи.

Превръщането на възрастта в частна ни позволи да ограничим неоторизиран достъп извън класа. Това е скриване на данни .

Ако се опитаме да осъществим достъп до полето за възраст от основния клас, ще получим грешка.

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

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