Инкапсуляция – это механизм “обёртывания” данных или кода, который работает с этими данными в отдельный модуль. Инкапсулированные, таким образом, переменные, отделены от других классов и доступ к ним возможен только с помощью методов класса, который содержит эти переменные.
Таким образом, мы, как бы, “прячем” переменные от остальных классов, что облегчает работу с ними в дальнейшем.
В ящике программирования Java, инкапсуляция достигается путём:
- Объявления переменной класса приватной (модификатор доступа private)
- Создание публичных (модификатор доступа public) методов для получения и изменения значения переменной.
Для понимания того, как это работает на практике рассмотрим пример простого приложения.
Пример:
Класс Company
public class Company {
private String companyName;
private String companySphere;
private String projectName;
public String getCompanyName() {
return companyName;
}
public void setCompanyName(String companyName) {
this.companyName = companyName;
}
public String getCompanySphere() {
return companySphere;
}
public void setCompanySphere(String companySphere) {
this.companySphere = companySphere;
}
public String getProjectName() {
return projectName;
}
public void setProjectName(String projectName) {
this.projectName = projectName;
}
@Override
public String toString() {
return "=============================\n"
+ "Company Name: " + companyName +
"\nSphere:" + companySphere +
"\nProject Name: " + projectName +
"\n============================\n";
}
}
Класс CompanyRunner
public class CompanyRunner {
public static void main(String[] args) {
Company uksatse = new Company();
uksatse.setCompanyName("UkSATSE");
uksatse.setCompanySphere("Aviation");
uksatse.setProjectName("SkybleLib");
System.out.println("UkSATSE info:");
System.out.println(uksatse);
}
}
В результате работы программы мы получим следующий результат:
/*Some system messages*/
UkSATSE info:
=============================
Company Name: UkSATSE
Sphere:Aviation
Project Name: SkybleLib
============================
Как мы видим, доступ к переменным класса Company из класса CompanyRunner возможен только с помощью методов getXXX и setXXX.
Инкапсуляция даёт нам следующие преимущества:
- Класс имеет полный контроль над всеми своими переменными.
- Другим классам, которые будут использовать данный класс не интересно, как именно хранятся данные в классе. В случае, если нам будет необходимо изменить тип данных, то нам не придётся вносить изменения в другие классы.
- Мы можем делать поля только для чтения или только для записи.
В этом уроке мы более глубоко изучили что такое инкапсуляция и как она применяется в языке программирования Java.
В следующем уроке мы изучим такое понятие в ООП как абстракция.