Инкапсуляция в Java
В подходах объектно-ориентированного программирования инкапсуляция (англ.: Encapsulation) означает способ обертывания и сокрытия деталей реализации абстрактного функционального интерфейса.
Инкапсуляцию можно рассматривать как защитный барьер, который препятствует произвольному доступу к коду и данным класса со стороны кода, определяемого внешними классами.
Доступ к коду и данным класса возможен только через строгий контроль интерфейса.
Основная функция инкапсуляции заключается в том, что мы можем изменять собственный код реализации без необходимости изменять фрагменты программы, которые вызывают наш код.
Правильная инкапсуляция может сделать код более понятным и удобным для сопровождения, а также повышает безопасность кода.
Преимущества инкапсуляции
1. Хорошая инкапсуляция может уменьшить связанность.
2. Внутреннюю структуру класса можно свободно изменять.
3. Переменными-членами можно управлять более точно.
4. Скрыть информацию и детали реализации.
Шаги для достижения инкапсуляции в Java
1. Измените видимость атрибутов, чтобы ограничить доступ к атрибутам (обычно ограничивается private), например:
В этом коде атрибутnameиageустановлен как private; только этот класс может получить к нему доступ, а другие классы не могут, тем самым скрывая информацию.
2. Для каждого атрибута значения предоставьте public-методы для внешнего доступа, то есть создайте пару методов-геттеров и сеттеров для доступа к private-атрибутам, например:
Использованиеthis: это ключевое слово используется для разрешения конфликта одинаковых имён между переменной экземпляра (private String name) и локальной переменной (переменная name в setName(String name)).
Пример
Рассмотрим пример класса с инкапсуляцией в Java:
Код файла EncapTest.java:
В приведенном выше примере public-методы являются точкой входа для внешних классов для доступа к переменным-членам класса.
Обычно такие методы называются getter- и setter-методами.
Следовательно, любой класс, который хочет получить доступ к private переменным-членам класса, должен использовать эти getter- и setter-методы.
В следующем примере показано, как осуществляется доступ к переменным класса EncapTest:
Код файла RunEncap.java:
Результат компиляции и выполнения приведенного выше кода выглядит следующим образом:
Name : James Age : 20Другие расширения