Вот краткие определения инкапсуляции и абстракции.
Абстракция:
Процесс абстракции в Java используется для того, чтобы скрыть определенные детали и показать только основные особенности объекта. Другими словами, он имеет дело с внешним видом объекта (интерфейса). Единственный хороший пример, который я вижу на разных сайтах, - это интерфейс.
Инкапсуляция:
В основном это скрытие состояния объекта с помощью таких модификаторов, как private, public, protected и т. Д. Мы открываем состояние через общедоступные методы только в случае необходимости.
То, что мы достигаем с помощью таких модификаторов private
, public
также скрывает ненужные детали из внешнего мира, что является не чем иным, как концепцией абстракции.
Итак, из приведенного выше объяснения похоже, что инкапсуляция является частью абстракции или мы можем сказать, что это подмножество абстракции. Но зачем тогда придуман термин инкапсуляции, когда мы можем иметь дело только с абстракцией? Я уверен, что должно быть какое-то существенное различие, которое их отличает, но большая часть материалов в сети говорит о них обоих почти одно и то же.
Хотя этот вопрос уже поднимался на этом форуме и раньше, но я снова задаю его с определенными сомнениями. В некоторых ответах также говорится, что абстракция - это концепция, а инкапсуляция - это реализация. Но я не куплюсь на это - если это правда, то я могу думать, что эти две разные концепции предназначены для того, чтобы нас запутать.
Обновление: - Через 5 лет я придумал свой собственный ответ, суть которого основана на ответах в этом посте и ниже.
An 'abstraction' (noun) is a concept that acts as a super-categorical noun for all subordinate concepts, and connects any related concepts as a group, field, or category.