Ось короткі визначення інкапсуляції та абстракції.
Абстракція:
Процес абстрагування на Java використовується для приховування певних деталей і лише відображення істотних особливостей об'єкта. Іншими словами, він стосується зовнішнього вигляду об'єкта (інтерфейсу). Єдиний хороший приклад, який я бачу для цього на різних сайтах, - це інтерфейс.
Інкапсуляція:
В основному це стосується приховування стану об'єкта за допомогою модифікаторів, таких як приватні, громадські, захищені тощо.
Те, що ми досягаємо за допомогою модифікаторів private
, public
також приховує непотрібні деталі із зовнішнього світу, що є не що інше, як концепція абстракції
Отже, зверху пояснення виглядає як інкапсуляція є частиною абстракції, або можна сказати, що це підмножина абстракції. Але чому тоді придуманий термін інкапсуляції, коли ми можемо мати справу лише з абстракцією? Я впевнений, що має бути якась основна відмінність, яка їх відрізняє, але більшість матеріалів у мережі говорить майже те саме для обох.
Хоча це питання було порушено на цьому форумі і раніше, але я його знову публікую з конкретними сумнівами. Деякі відповіді також говорять, що абстракція - це концепція, а інкапсуляція - це реалізація. Але я не купую цього - якщо це правда, то я можу подумати, що ці дві різні концепції надають, щоб нас бентежити.
Оновлення: - Через 5 років я придумав власну відповідь, яка є суть, заснована на відповідях у цій публікації та нижче.
private
public
, оскільки вони надають лише інформацію / приховування даних, які ми це робимо, оскільки це хороша практика захисту даних екземпляра.
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.