Abstraction
Encapsulation
Abstraction solves the problem at design level (what is required)
Encapsulation solves the problem at implementation level.
We use abstraction to hide unwanted data and show only methods and properties which are required to the user.
It binds member properties and member function into single unit and prevents it from the outsiders by using access specifier so that they cannot access it directly.
Its main focus is on the object instead how it does.
It hides the internal details and mechanism of how the object does something which are complex or confidential.
It terms of design it is outer layout. For example outer look of laptop like its display screen and keyboard.
In terms of implementation it is inner layout that how the keyboard, motherboard and bios of the laptop is working internally.