Инкапсуляция Java
Инкапсуляция 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();
}
}
Вывод
Area: 30
В приведенном выше примере мы создали класс с именем Area. . Основная цель этого класса — вычислить площадь.
Для вычисления площади нам нужны две переменные:length и ширина и метод:getArea()
. Поэтому мы объединили эти поля и методы в одном классе.
Здесь к полям и методам можно получить доступ и из других классов. Следовательно, это не сокрытие данных. .
Это всего лишь инкапсуляция . Мы просто храним похожие коды вместе.
Примечание :Люди часто считают инкапсуляцию сокрытием данных, но это не совсем так.
Инкапсуляция относится к объединению связанных полей и методов вместе. Это можно использовать для скрытия данных. Инкапсуляция сама по себе не является сокрытием данных.
<час>Почему инкапсуляция?
- В Java инкапсуляция помогает нам объединять связанные поля и методы, что делает наш код более чистым и удобным для чтения.
- Это помогает контролировать значения наших полей данных. Например,
class Person { private int age; public void setAge(int age) { if (age >= 0) { this.age = age; } } }
Здесь мы делаем age переменнаяprivate
и применяя логику внутриsetAge()
метод. Итак, возраст не может быть отрицательным. - Методы получения и установки предоставляют доступ только для чтения. или только для записи доступ к полям нашего класса. Например,
getName() // provides read-only access setName() // provides write-only access
- Это помогает разделить компоненты системы. Например, мы можем инкапсулировать код в несколько пакетов.
Эти несвязанные компоненты (комплекты) можно разрабатывать, тестировать и отлаживать независимо друг от друга и одновременно. При этом любые изменения в одном компоненте не влияют на другие компоненты. - Мы также можем добиться сокрытия данных с помощью инкапсуляции. В приведенном выше примере, если мы изменим переменную длины и ширины на частную, доступ к этим полям будет ограничен.
И они скрыты от внешних классов. Это называется сокрытием данных. .
Скрытие данных
Сокрытие данных — это способ ограничения доступа к нашим элементам данных путем сокрытия деталей реализации. Инкапсуляция также позволяет скрывать данные.
Мы можем использовать модификаторы доступа для скрытия данных. Например,
Пример 2. Сокрытие данных с помощью спецификатора private
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());
}
}
Вывод
My age is 24
В приведенном выше примере у нас есть private
поле возраст . Так как это private
, к нему нельзя получить доступ извне класса.
Чтобы получить доступ к age , мы использовали public
методы:getAge()
и setAge()
. Эти методы называются методами получения и установки.
Создание возраста private позволил нам ограничить несанкционированный доступ из-за пределов класса. Это скрытие данных .
Если мы попытаемся получить доступ к age поле из Главного class, мы получим ошибку.
// error: age has private access in Person
p1.age = 24;
java